我知道查询的成本会更低。但最近我发现声明成本应始终低于100。这是真的吗?
根据我的理解,成本与(IO操作/ CPU使用/使用的网络资源)成比例。这意味着当我说成本很高时,这三个操作中的任何一个/全部,即IO操作/ CPU使用/网络资源使用可能很高。这是对的吗?
答案 0 :(得分:3)
费用应该准确。除非我们正在讨论从10053跟踪中检查同一查询的不同计划,否则更多关注准确性而不是成本是低还是高。
如果您的查询达到数百万行并执行一堆聚合,那么成本为10的计划可能效率极低。从逻辑上讲,您知道查询会非常昂贵。如果优化器认为查询非常便宜,那几乎可以保证您的统计信息不准确。如果您的统计信息不准确,则意味着优化程序将选择效率低于预期的计划。就个人而言,如果通过注意成本太低而不是注意到成本过高而确定需要注意的更多查询,我不会感到惊讶。
采取任何形式的截止成本是荒谬的。如果您知道每个查询都将成为获取几十行的OLTP应用程序的一部分,那么再次查看成本为数千的计划可能是有意义的,以查看优化程序是否选择了错误的计划,因为无效的统计数据。但非常非常少的系统只有非常特定的OLTP查询 - 大多数系统都会错过非常便宜的查询,这些查询会返回一行或两行,而且查询和汇总更多行的查询会更加昂贵。创建任何类型的上限往往会导致开发人员做愚蠢的事情 - 将“廉价”查询放在循环中而不是编写“昂贵”的连接可能意味着您的所有查询都具有低成本但是整个系统的运行效率低于它可以。