Использование индекса сервера SQL в зависимости от значения столбца - PullRequest
0 голосов
/ 15 мая 2018

У меня огромная таблица (в ней более 40 миллионов записей) и индекс по одному из столбцов.Столбец является ссылочным столбцом - typeId.

Я столкнулся с проблемой, заключающейся в том, что при фильтрации данных в этом столбце с использованием различных значений столбца иногда используется индекс, а иногда нет.

Например.просто запустить:

select * from LargeNumberOfItemsTable where typeid=4

заставляет SQL Server использовать индекс, но

select * from LargeNumberOfItemsTable where typeid=3

не использует индекс.

Если индекс не используется, запрос принимаетдолгое время, но когда я намекаю, что индекс следует использовать, его запуск занимает считанные секунды.

Странно то, что статистика была обновлена, а индекс перестроен.

У кого-нибудь есть идеи, почему такое поведение может происходить?Я ищу некоторые подсказки, где искать причину.

1 Ответ

0 голосов
/ 15 мая 2018

SQL Server выбирает план на основе приблизительного количества строк. Если расчетное число строк является точным, время, необходимое для полного сканирования таблицы в сравнении с поиском и поиском ключа, будет во многом зависеть от вашего оборудования и доступных ресурсов.

Убедитесь, что индексы были перестроены с помощью MAXDOP 1. В противном случае экстенты, вышедшие из строя, уменьшат преимущества сканирования с опережающим чтением, в результате чего план сканирования будет работать хуже, когда данные не кэшируются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...