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% строк всей таблицы.

Другие вопросы по тегам