сканирование индекса в плане выполнения MS SQL при использовании некластерного индекса в предложении where вместо поиска по индексу - PullRequest
0 голосов
/ 16 января 2019

В моем проекте хранимые процедуры поиска выглядят следующим образом

create proc CommentGet
(
@Type int,
@ParentID int
)

as
begin
select * from CommentTable where (@Type is null or CommentTable.Type=@Type) and (@ParentID is null or CommentTable.ParentID=@ParentID) 
end

В этом случае я ввел Type и ParentID как некластерный индекс для CommentTable. Когда я запускаю код, я вижу план выполнения с использованием сканирования индекса вместо поиска индекса для получения результата, который заставляет SQL читать целые страницы. И, видимо, я не могу использовать преимущества некластерной индексации.

Как я выяснил до сих пор, если переменная используется в поисковом термине, эта проблема возникает, и если прямое количество подсказок where не используется, проблема не возникает и работает правильно (index Seek ).

Посоветуйте, пожалуйста, как использовать преимущества некластерного индекса для его обработки Здесь плоскость исключения в качестве примера, поскольку вы видите записанное сканирование индекса вместо индекса Seek

1 Ответ

0 голосов
/ 16 января 2019

Каким образом у вас есть ваши индексы? Какой столбец и что находится под каждым индексом? Я бы предположил, что вы неправильно проиндексировали или каким-либо способом, который лучше всего соответствует вашему запросу, поскольку sql автоматически использует лучший и самый эффективный поиск при запуске.

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