【问题标题】:how to dertermine a query is better than the other from oracle EXPLAIN PLAN [closed]如何确定一个查询比oracle EXPLAIN PLAN中的另一个更好[关闭]
【发布时间】:2014-04-25 15:41:34
【问题描述】:

我正在优化一个 oracle 查询。我发现我的新查询的成本低于原来的查询。我认为我的新查询可能比旧查询具有更好的性能。但是网上很多人说“COST 列不能用来比较执行计划”。所以我的问题是,如果你不检查解释计划中的成本,你怎么知道一个查询的性能比另一个更好?还有其他方法吗?谢谢!

【问题讨论】:

  • 如果您想获得有关使用explain 的指南,那么可能是错误的地方。
  • @gary 。 . .关于特定查询和两个执行计划的问题适用于 Stack Overflow。关于比较执行计划的一般性问题过于宽泛。
  • 这个问题不是太宽泛。通常cost 有点毫无价值,但如果您只有有解释计划,那么成本就是比较计划的最佳方式。乔纳森·刘易斯(Jonathan Lewis)写了一本关于基于成本的优化器的书,他写过这个问题here。一个相关的引用:“......比较两个查询的成本以查看优化器认为哪一个会更快是完全有效的,但是由于优化器的限制和缺陷,这样做可能并不完全明智。”

标签: sql oracle plsql oracle-sqldeveloper


【解决方案1】:

查询计划是非常有用的动物。然而,一般来说,它们并不是确定两个查询中的哪一个实际上会更有效的有用方法。在极少数情况下,人们可以查看两个合理的查询计划并立即知道一个比另一个更有效。如果可以的话,这通常意味着其中一个计划存在严重缺陷(即,您看到的是对十亿行表的表扫描,而不是获取您知道自己感兴趣的 10 行的索引访问)。

在比较两个不同的计划时,您需要关注执行统计数据。大多数时候,衡量实际的逻辑 I/O 是最简单的衡量标准。您可以通过在 SQL*Plus 中运行 set autotrace on 或使用 SQL Developer 中的自动跟踪选项(F6 而不是 F5 来运行查询)来获得它。您还可以测量经过的时间,但这通常需要更多的努力来生成合理的基准,基于查询运行时将在各种缓存(数据库、操作系统、SAN 等)中的块的比例。无论缓存如何,CPU 时间在执行过程中可能会更稳定一些。有时,您需要测量一些其他统计数据(即,如果您正在考虑优化涉及数据库链接的查询,则通过网络发送的数据量)。

【讨论】:

    猜你喜欢
    • 2013-07-18
    • 1970-01-01
    • 2012-08-13
    • 2016-09-19
    • 2018-04-30
    • 2018-02-15
    • 2017-01-15
    • 1970-01-01
    相关资源
    最近更新 更多