我正在优化oracle查询。我发现新查询的成本低于原始查询。我认为我的新查询可能比旧查询具有更好的性能。但网上有很多人说“COST专栏不能用于比较执行计划”。所以我的问题是,如果不从解释计划中检查成本,您如何知道一个查询的性能优于另一个?还有其他方法吗?谢谢!
答案 0 :(得分:3)
查询计划是非常有用的动物。但是,一般而言,它们不是确定两个查询中哪一个实际上更有效的有用方法。人们可以看到两个合理的查询计划并立即知道一个人比另一个人更有效率的例子非常少。如果可以的话,这通常意味着其中一个计划存在严重缺陷(即您看到十亿行表的表扫描而不是索引访问以获取您知道您感兴趣的10行)。
当归结为比较两个不同的计划时,您需要关注执行统计。大多数情况下,测量实际逻辑I / O是最简单的尺度。您可以通过在SQL * Plus中运行set autotrace on
或在SQL Developer中使用autotrace选项(F6而不是F5来运行查询)来实现此目的。您还可以测量经过的时间,但通常需要更多的努力来根据在查询运行时各种缓存(数据库,操作系统,SAN等)中的块的比例来生成合理的基准。无论缓存如何,CPU执行时间的CPU时间可能会更稳定一些。有时,您需要测量一些其他统计信息(即,如果您正在考虑优化涉及数据库链接的查询,则通过网络发送的数据量)。