有关SQL Server分布统计的问题(3)
来源:未知 责任编辑:责任编辑 发表时间:2014-02-18 03:26 点击:次
3: OPTION (RECOMPILE)

注意执行计划中红色圈注的部分,由于这次条件筛选的值108不在直方图中,故查询优化器使用AVG_RANGE_ROWS列来估计返回的行数,在本例中,在108到110之间的平均值为53.3333。

示例四:(RANGE_ROWS+EQ_ROWS+AVG_RANGE_ROWS)
1: SELECT * FROM Itens
2: WHERE Quantidade <=112
3: OPTION (RECOMPILE)


说明:估计的行数=0+56+171+59+88+60+160+64+50.66667=708.667,此值与执行计划中的“估计行数”一致。
示例五:(RANGE_ROWS+EQ_ROWS+SPECIAL_AVG_RANGE_ROWS)
1: SELECT * FROM Itens
2: WHERE Quantidade <=113
3: OPTION (RECOMPILE)

0+56+171+59+88+60+160+64+50.66667+50.66667=759.33334。
不过,查询优化器估计的值为744.857,那问题是它如何得到此值呢?
答案是:查询优化器汇总了两次43.42857,那查询优化器又是如何得到43.42857?
回答这个问题,查询优化器没有使用AVG_RANGE_ROWS列的值,而使用新的计算公式,即:
special_avg_range_rows = range_rows / ( distinct_range_rows + 1 ),根据直方图中第5行来计算:
304/(6+1) = 43.42857.
由此得出估计的行数公式:
0+56+171+59+88+60+160+64+43.42857+43.42857=744.85714
作者 Yuejun Sun
相关新闻>>
最新推荐更多>>>
- 发表评论
-
- 最新评论 进入详细评论页>>