Полное сканирование таблицы происходило даже при наличии индекса? - PullRequest
3 голосов
/ 18 ноября 2009

У нас есть 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 ]

3 голосов
/ 18 ноября 2009

Если большинство ваших дат найдено с помощью < '20091010', тогда индекс может быть упущен в пользу сканирования таблицы. Как вы распределяете даты в этой таблице? Что такое мощность? Используется ли индекс, если вы только select date, а не select *?

2 голосов
/ 18 ноября 2009

Если индекс не охватывает *, оптимизатор понимает, что сканирование таблицы, вероятно, более эффективно, чем поиск / сканирование индекса и поиск по закладкам. Какова ожидаемая избирательность диапазона дат? Определен ли первичный ключ?

...