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

Oracle优化SQL需要看COST吗?

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

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

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

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

暂无图片 评论
暂无图片 有用 8
暂无图片
Thomas

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

暂无图片 评论
暂无图片 有用 2
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
胡武
题主
2023-06-17
带着怀疑的眼光看
杜伟

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

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

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏