2009-11-18 55 views
2

我们有一个SQL查询如下全表扫描,甚至发生?

select * from Table where date < '20091010' 

然而,当我们看查询计划,我们看到

查询类型是SELECT。

FROM TABLE 
     Worktable1. 
    Nested iteration. 
    Table Scan. 
    Forward scan. 
    Positioning at start of table. 
    Using I/O Size 32 Kbytes for data pages. 
    With MRU Buffer Replacement Strategy for data pages. 

这看起来似乎暗示全表扫描已完成。为什么索引不被使用?

回答

3

如果大多数日期通过应用< '20091010'那么指数很可能有利于表扫描的忽视找到。那张表中的日期分布是什么?什么是基数?如果您只使用索引select date而不是select *?

1

除非索引覆盖*,否则优化程序会意识到表扫描可能比索引查找/扫描和书签查找更有效。日期范围的预期选择性是什么?您是否定义了主键?