Меньше или больше, чем проблема оператора для индекса на сервере SQL - PullRequest
1 голос
/ 07 декабря 2011

Я обнаружил, что если я запрашиваю таблицу с оператором меньше или больше, индексы сервера sql не будут работать должным образом.

Допустим, у меня есть простая таблица (TestTable), содержащая только 2 столбца, например:

Column Name, column type, primary Key, index
iID,         int,         yes,         cluster index
iCount,      int,         no,          non-cluster index
name,        nvarchar(255), no,        no index

Теперь я запрашиваю таблицу следующим образом:

ВЫБРАТЬ * ИЗ TestTable, ГДЕ iCount = 10.

Очень хорошо, сервер Sql будет использовать некластерный индекс для столбца iCount для получения результата.

Однако, если я сделаю запрос к таблице следующим образом:

ВЫБРАТЬ * ИЗ TestTable, ГДЕ iCount <10, </p>

Сервер Sql выполнит сканирование индекса по индексу кластера для iID для получения результата.

Мне интересно, почему сервер sql не может использовать правильный индекс, когда я использую в запросе оператор меньше или больше оператора?

1 Ответ

4 голосов
/ 07 декабря 2011

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

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