2015-05-19 117 views
1

我知道更少的成本更快的查询。但最近我遇到了成本应该始终低于100的说法。真的吗 ?应该计划成本小于100?

根据我的理解,成本与(IO操作/ CPU使用率/使用的网络资源)成比例。这意味着当我说成本很高时,这三种操作中的任何一种/所有这些操作,即IO操作/ CPU使用率/网络资源使用率可能很高。那是对的吗 ?

+6

没有这种说法是完整的,完全废话!对于同一查询,比较一个计划和另一个计划的成本只有意义。对于返回巨大结果集的某个查询,10,000,000的成本可能是完全可以接受的。 –

+0

谢谢托尼。 Ismy对Cost的理解是否正确? – emilly

+0

同样如您所说“成本只有在比较一个计划与另一个计划对于同一个查询时才有意义”,这意味着以千计成本没有任何问题。这意味着如果可能,我们应该尽量降低它? – emilly

回答

3

成本应该是准确的。除非我们正在讨论从10053追踪中检查同一查询的不同计划,否则更担心精度而不是成本是低还是高。

如果您有一个查询触及数百万行并执行一堆聚合,则成本为10的计划可能效率非常低。从逻辑上讲,您知道查询将非常昂贵。如果优化器认为查询非常便宜,则几乎可以保证您的统计数据不准确。如果您的统计数据不准确,那意味着优化器将选择一个效率低于应该的计划。就个人而言,如果我发现需要关注的更多查询,我不会感到惊讶,因为注意到成本太低,而不是注意到成本太高。

选择任何类型的成本截止是荒谬的。如果您知道每个查询都将成为获取几十行的OLTP应用程序的一部分,那么再次查看计划中的成本可能在千元以上,以查看优化程序是否选择了一个错误的计划的无效统计信息。但是很少有系统只有这种特定类型的OLTP查询 - 大多数系统都会丢失非常便宜的查询,这些查询会返回一行或两行以及更昂贵的查询,从而读取和聚合大量的行。创建任何类型的上限往往会导致开发人员做一些愚蠢的事情 - 将“便宜”查询放入循环中而不是编写“昂贵”的连接可能意味着您的所有查询都具有低成本,但是整个系统的运行效率远低于它可以。

+0

谢谢贾斯汀。你说过“一项成本为10的计划可能效率很低”这是否意味着计划效率取决于其他参数与成本之间的差距? – emilly

+0

你也说过“如果优化器认为查询非常便宜,那几乎可以保证你的统计数据不准确”我不确定统计数据在这里是什么意思? – emilly