consistent gets减少,cost增加?

   在一条SQL语句中,当使用索引时,cosistent gets 减少,而cost增加。理论上在稳定后的执行计划中,physical reads为零值的前提下,
cost应当相应减少。下面来看看其原由。

1、原始的SQL语句  

2、强制走索引    

3、表上的索引情况  

4、列上的统计信息    

5、收集统计信息  

6、更新统计信息后SQL语句执行情况

7、使用自动生成直方图方式收集统计信息并查看SQL执行情况 

8、使用skewonly 再次生成统计信息并查看SQL执行情况    

9、总结
 a、当SQL语句出现consistent gets减少,而cost增加的情形,应考虑统计信息是否正确。因为rows,bytes,cost是计算值,不稳定.
 b、索引未能正确使用的情况同样会由于缺乏最新且正确的统计信息而导致不可用.
 c、尽管统计信息为最新,但非均衡列上无直方图信息亦同样导致索引失效.  
 d、收集统计信息时 size auto会自动收集非均衡分布列上的直方图信息(前提是where子句中引用到该列,系统根据列使用历史确定是否为其生成).
 e、size auto不能保证完全收集到正确的统计信息时,使用skewonly模式(本例中即是,因为是测试数据库,可能由于列VALUE_DATE使用的历史
   统计信息不够,而不能生成正确的直方图).
 f、等高直方图容易导致错误的估算以及引起查询优化器预估值不稳定(笔者尝试多次,的确如此,有时候在VALUE_DATE的桶数为75时也出现过
   consistent gets为1760的情况).
 

posted @ 2011-11-14 11:49  生活不是用来挥霍的  阅读(217)  评论(0编辑  收藏  举报