我知道成本越低,查询速度就越快。但最近我看到了这样一句话:成本应该始终小于100。这是真的吗?
据我所知,成本与(IO操作/CPU使用率/使用的网络资源)成正比。这意味着当我说成本很高时,这三个操作中的任何一个/所有操作,即IO操作/CPU使用率/网络资源使用率都可能很高。对吗?
发布于 2015-05-20 01:47:20
成本应该是准确的。除非我们讨论的是从10053的跟踪中检查同一查询的不同计划,否则要更多地关注准确性,而不是成本是低还是高。
如果您有一个查询命中数百万行并执行大量聚合,则开销为10的计划的效率可能会非常低。从逻辑上讲,您知道查询的开销会很大。如果优化器认为查询非常便宜,那么几乎可以保证您的统计数据是不准确的。如果您的统计数据不准确,这意味着优化器将选择一个效率较低的计划。就我个人而言,如果我注意到成本太低,而不是注意到成本太高,从而发现了更多需要关注的查询,我不会感到惊讶。
选择任何一种成本的截止值都是荒谬的。如果您知道每个查询都将是一个获取几十行的OLTP应用程序的一部分,那么重新查看一个开销高达数千行的计划可能更有意义,看看优化器是否因为无效的统计信息而选择了一个糟糕的计划。但是,很少有系统只有那种非常特定的OLTP查询--大多数系统缺少非常廉价的查询,这些查询返回一两行,而读取和聚合更多行的代价更高的查询。创建任何类型的上限都会导致开发人员做一些愚蠢的事情--将“廉价”的查询放在一个循环中,而不是编写一个“昂贵的”连接,这可能意味着所有查询的成本都很低,但整个系统的运行效率却远远低于它的运行效率。
https://stackoverflow.com/questions/30331895
复制相似问题