我们有一个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.
似乎表明完成了全表扫描。为什么不使用索引?
答案 0 :(得分:3)
如果通过应用< '20091010'
找到了大部分日期,则可能会忽略索引以支持表扫描。您在该表中的日期分布是什么?什么是基数?如果仅select date
而不是select *?
答案 1 :(得分:2)
除非索引覆盖*,否则优化器会意识到表扫描可能比索引搜索/扫描和书签查找更有效。日期范围的预期选择性是多少?您是否定义了主键?