即使索引存在,也会发生全表扫描?

时间:2009-11-18 19:50:14

标签: sql database sybase

我们有一个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.

似乎表明完成了全表扫描。为什么不使用索引?

2 个答案:

答案 0 :(得分:3)

如果通过应用< '20091010'找到了大部分日期,则可能会忽略索引以支持表扫描。您在该表中的日期分布是什么?什么是基数?如果仅select date而不是select *?

,则使用索引

答案 1 :(得分:2)

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