我在DB2数据库上的SQL查询上运行了执行计划,以执行两个查询。第一个查询的成本约为380000。在通过用子查询替换一些内部联接来修改查询后,成本降低为312(注意:不是312000,只有312)
但是,将每个查询运行多次后,较大的查询平均运行速度更快。这可能是什么原因?
答案 0 :(得分:1)
对于使用基于成本的优化器的任何数据库,成本都是估算值。如果估计正确,则查询成本和运行时之间应该存在关联。但是,有时估算值相差甚远。通常,您更有可能在查询中查询优化器的估计值是否偏离,因为当估计值偏离计划时,很可能是错误的,查询运行会很慢,并且有人要抱怨。人们通常不会考虑优化器的估计正确的99%的查询。
在这种情况下,听起来好像优化器的成本估算相差甚远。最有可能的原因是统计信息在某些表,索引或列上不正确。当然,可能还存在其他问题-可能期望缓存中的行的比例急剧下降,或者磁盘I / O的价格比实际价格高出或低得多(即,您的I / O子系统承受着沉重的压力并且速度很慢,或者您将所有内容都存储在固态磁盘上,因此I / O确实非常快)。但我总是从查看统计信息开始。