Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Почему не используется индекс / 3 сообщений из 3, страница 1 из 1
27.11.2001, 06:25
    #32017849
Sergey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не используется индекс
MS SQL7.0
Есть Таблица 'Таблица', одно из ее полей 'Дата' типа datetime по которому построен индекс 'Таблица_Index_Дата', есть еще комплексный индекс в котором тоже присутствует поле 'Дата'.
В таблице 35 млн замисей.

Select * from Таблица where Дата between '11/07/2001' and '11/20/2001'
Запрос выполняется 1 минуту, в плане его выполнения показанно, что идет прямое сканирование таблицы.

Если в запросе указать явно использование индекса:
Select * from Таблица with (index(Таблица_Index_Дата))
where Дата between '11/07/2001' and '11/20/2001'
то запрос длится 2 сек !!!

Почему оптимизатор запросов не использует сам этот индекс ???

Sergey
...
Рейтинг: 0 / 0
27.11.2001, 06:52
    #32017852
Почему не используется индекс
Может быть несколько причин:
1) Отсутствует или устарела статистика по этому индексу. Надо сделать update statics.
2) Индекс недостаточно селективен. Т.е. записей много, а значений дат немного. В этом случае хинт вполне оправдан и применен как раз где надо.
3) Могут быть еще какие-нибудь чудеса с индексами, которые сбивают оптимизатор с толку, например отсутствие кластерного индекса в наборе индексов или невысокая селективность кластерного индекса или кластерный индекс имеет чудовищный размер. Что-нибудь из этого может подтолкнуть оптимизатор к ошибочному решению, что скан таблицы дешевле.

А вообще-то оптимизатор в mssql7.0 на порядок слабее, чем в mssql2000.
...
Рейтинг: 0 / 0
30.11.2001, 09:14
    #32018201
Garya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не используется индекс
Если комплесный индекс составлен таким образом, что поле Дата перечислена в индексе вторым или третьим (короче, не первым), то индекс не будет использоваться, если во фразе where не задано условие фильтрации по полю, которое фигурирует первым в индексе.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Почему не используется индекс / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]