暂无图片
Oracle优化SQL需要看COST吗?
我来答
分享
胡武
2023-06-16
Oracle优化SQL需要看COST吗?

Oracle优化SQL需要看COST吗?

我来答
添加附件
收藏
分享
问题补充
4条回答
默认
最新

做SQL优化的时候根本不需要看Cost,因为Cost是根据统计信息、根据一些数学公式计算出来的。

正是因为Cost是基于统计信息、基于数学公式计算出来的,那么一旦统计信息有误差、数学公式有缺陷,Cost就算错了。而一旦Cost计算错误,执行计划也就错了。

当SQL需要优化的时候,Cost往往是错误的。既然是错误的Cost,干什么还要去看Cost呢?

暂无图片 评论
暂无图片 有用 8
打赏 0
暂无图片
Thomas

请问,如果不看COST,那么如何对比优化前后SQL的效率变化?不看COST,又如何知道SQL执行过程中最慢的几步在哪个环节?

暂无图片 评论
暂无图片 有用 2
打赏 0
2023-06-17
Cost不是真实的值,是优化器估算出来的,出错的可能性很大。要会看统计信息的逻辑读、物理读、Sorts以及传输交互次数;还要会看执行计划访问路径和连接方式。
广州_老虎刘
2023-06-17
优化前后的对比看cost的倒是比较少,如果统计信息如果出了问题, cost低,对应的执行效率可能也低。特别是需要加hint优化的sql,用cost比较更是不合理。当然, 你如果加个索引, 前后的cost会相差很大。一般用buffer gets,执行时间,执行计划的合理性来比较
广州_老虎刘

优化SQL不用看cost的观点,在某大师的书中看到过。我的意见是既要看cost, 又不能完全相信cost。 cost高的步骤一般都是需要重点关注的优化点,而cost不高的地方也不一定就没问题。如果cost不高,而sql执行又慢(可能统计信息没有及时收集或优化器算法缺陷),这时就需要生成带有A-rows的执行计划, 与E-rows比较, 来判断当前执行计划是否合理,通过纠正错误执行计划,达到优化目的。

暂无图片 评论
暂无图片 有用 2
打赏 0
胡武
题主
2023-06-17
带着怀疑的眼光看
杜伟

我觉得cost还是需要看的,在统计信息正确执行计划正确的情况下,cost高的步骤就是需要优化的地方。

另外如刘老师所说的执行计划错误的情况下,对比预估与真实执行的地方,此时就需要怀疑的角度来看cost,优化器就是以cost来选择执行计划,因为某些错误信息而错误的预估了cost从而导致选择错了执行计划。

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
ORACLE用DB_LINK连接PG数据库,报错:ORA-28500,ORA-02063
回答 3
已采纳
pg中的表名,创建的时候,不加双引号时默认是小写;oracle中的查询sql,不加双引号时,默认会转换为大写。所以,就报这个错了
AWR分析报告问题求助:老师你好,请帮忙分析下AWR报告,谢谢。
回答 8
1.增加sql缓存2.优化sql
Oracle数据库中的受欢迎和不受欢迎值各是什么?
回答 2
已采纳
直方图中某个值的受欢迎程度会影响基数估值算法,具体如下:  受欢迎值:受欢迎值出现在多个桶的端点值,优化器通过检查某个值是否是桶的端点值来确定该值是否受欢迎,如果是,那么对于频率直
Oracle dg库如何重建temp?
回答 1
已采纳
直接上去建立就行了。createtemporarytablespaceXXX。。。。。。。
startup mount 导致sga持续分配到100%
回答 2
明白了,谢谢章芋文
达梦迁移工具具体怎么使用啊,是DM7=>oracle,数据源和目的中,信息填写有什么要求啊?
回答 1
简单给你说一下过程:打开达梦迁移工具》新建工程》然后左边树形栏会显示你新建的工程,在数据类型映射里面,你可以定义dm7Oracle迁移的映射关系,调度和作业里面你可以建相应的调度和作业,然后还有个迁移
Oracle导入数据不指定目录, 数据库会自动去找到目录吗?
回答 2
已采纳
需要创建directory,名字自定义,路径自定义,可以创建多个,要用那个就directory路径名称。例如:createdirectorydata1as'/home/oracle'; &n
BTRobot_v2.2.7在RAC集群下巡检报错
回答 1
看你第一张图应该是在节点1执行的,根据提示你需要手动在节点2的Oracle用户下执行屏幕上打印出来的命令,应该就是你第一张图截图的最后一行的下一行,你没截上,第二张图应该是你没手动执行脚本,没有采集到
为什么12c 在线迁移数据文件,有的pdb下可以正常迁移,有的老提示ORA-65250错误
回答 1
请贴出详细的信息或图片,以及数据库环境信息
检索数据库数据是否为11位手机号
回答 3
直接在数据库里用存储过程呗,具体逻辑和你用jdbc的逻辑是一样的。我之前用类似的方法找过一个特定的值是存在于哪个表的哪个字段。直接用 selectfromusertabcols做游标写循环,