2014-08-28 156 views
1

我知道这已被问过很多次,但没有一个有明确的答案。Oracle执行计划:成本与实际问题:成本较高的查询运行得更快

Here

Here

在我的情况,我的DBA优化了选择查询其需要大约1.05分钟来执行。我在1秒内完成了进一步的改进。但是我执行计划中我优化的那个成本更高。我的数据库管理员建议,因为我的查询是昂贵的,我们不应该改变查询。

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

任何人都可以点我在正确的方向

+1

您的数据库管理员也应该知道,比较成本只对同一查询的不同计划有意义,而不适用于不同的查询,即使它们最终具有相同的结果集。而[成本没有度量单位](http://docs.oracle.com/cd/E25054_01/server.1111/e16638/ex_plan.htm#i18300)。 – 2014-08-28 11:30:45

+0

@AlexPoole是的,我想他应该知道。但是,有什么结果呢,我可以用来解决他的观点的文档 – 2014-08-28 14:21:23

+1

经常这样[从Tom Kyte开始](https://asktom.oracle.com/pls/asktom/f?p=100:11:0: ::: P11_QUESTION_ID:313416745628)。但也要确保你不仅仅看到第一个查询缓存了第二个查询所使用的数据的好处;同时运行多次并交错检查时间是否一致。 – 2014-08-28 14:24:00

回答

2

由于Tom Kyte says

你不能比较2个查询的成本与彼此的成本。他们根本不是 可比。

...

如果我们得到另一个查询 - 另一个类似的查询 - 我们经历了同样的步骤,建立 很多计划,分配成本,挑一个与该组最低的成本。

我们却无法把这些2个查询和比较每个到 其他的相对成本。这些成本仅针对这些查询。

许多事情都会影响查询的“成本”。 “成本”仅仅是我们在给定特定环境时选择查询的一些人造数字 。 ...

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

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

1

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

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