|
原帖由 mihawk 于 2008-4-7 17:26 发表 ![]()
我认为可能的原因有两个,
1. 因为你使用的是常量来查询, 所以cbo会使用直方图来估算会得到多少笔记录, 从而计算使用index的cost是多少, 这个时候如果直方图不准确, 可能就会导致计算出来的索引扫描成本高于table scan的成本, 最后cbo就会选择成本较低的table scan.
2.直方图是准确的, 确实你这个sql返回的记录集很大, 应该走table scan更合理.这个可以通过hint指定索引, set trace on来确定. 到底应该走索引还是应该走全表扫描.
不过可以简单估算一下, 20080301~20080310之间有64200笔记录, 索引扫描总成本为49885.
而20080301~20080320之间有183144笔记录, 如果简单按比例来算的话扫描成本是 49885/64200*183144=142307.
而cbo估算的全表扫描成本是90365.
所以cbo选择了全表扫描, 成本9w, 比索引扫描的成本14w要小.
你好,请教一个问题。如果一个列唯一,那么在这个列上做直方图统计有意义吗?
谢谢 |
|