MS SQL Server не использует индекс, когда ГДЕ имеет IN с более чем 6 значениями
Так что у меня есть очень странная проблема, если я запускаю такой запрос:
SELECT *
FROM tbl_x
WHERE tbl_x.SomeCode IN ('1','2','3','4','5','6')
Запрос использует индекс таблицы, однако, если я сделаю запрос это:
SELECT *
FROM tbl_x
WHERE tbl_x.SomeCode IN ('1','2','3','4','5','6','7')
Запрос игнорирует индекс и решает сделать сканирование таблицы
Почему MS SQL Server не использует индекс, если в предложении Where более 6 значений?
1 ответ
Я предполагаю, что на основе распределения данных и количества запросов оптимизатор решит использовать полное сканирование таблицы, потому что это дешевле, чем использовать индекс.
Вы можете проверить:
SELECT COUNT(*)
FROM tbl_x;
а также
SELECT COUNT(*)
FROM tbl_x
WHERE tbl_x.SomeCode IN ('1','2','3','4','5','6','7');
Возможно, вы превысили 20% строк всей таблицы.