Oracle执行计划:成本与实际问题:更高成本的查询运行得更快

时间:2014-08-28 10:35:30

标签: oracle sql-execution-plan

我知道之前已经多次询问过这个问题,但没有一个人会有一个明确的回答。

Here

Here

在我的情况下,我的DBA优化了一个选择查询,大约需要1.05分钟才能执行。我在1秒内完成了进一步的增强。但是我优化的那个在执行计划中花费更多。我的DBA建议,因为我的查询费用较高,我们不应该更改查询。

我知道两个查询的执行计划无法比较。但是我应该如何说服我的DBA了解执行计划是一个“计划”但结果是“实际”

有人能指出我正确的方向

2 个答案:

答案 0 :(得分:2)

作为Tom Kyte says

  

您无法将2个查询的费用与彼此进行比较。他们根本就没有   可比。

     

...

     

如果我们得到另一个查询 - 另一个类似的查询 - 我们将执行相同的步骤,构建   许多计划,分配成本,从该集合中选择成本最低的那个。

     

然而,我们不能接受这两个查询并比较每个查询的相对成本   其他。这些费用特定于这些查询。

     

许多因素会影响查询的“成本”。 “成本”只是一些人为的数字   我们到达时选择给定特定环境的查询。 ......

     

不要比较它们,你不能 - 它们也可能是随机数字。

DBA应该已经知道,任何人都应该尝试调整查询(并且你在问题中说过你这样做)。他们也应该知道相信汤姆的意见。

答案 1 :(得分:1)

计算的成本是过去计算的统计数据的结果,也取决于配置。例如,如果设置optimizer_index_cost_adj,那么它将影响成本,但不会影响执行查询所需的实际时间。而第二个旧的统计数据已经是第二个旧的,不再是100%准确。

另一方面,当您测量查询的执行时间时,测量的时间取决于您的缓存命中率。您当然可以在每次查询之前刷新所有缓存,但这不会像现场情况那样。因此,当您声称您的陈述需要1.00秒而不是1.05时要小心。因为你可能只是在你的实验室做实验而不是你的现实。