. У меня есть большая таблица в SQL Server 2005, где мне нужно выбирать записи из некластеризованного ключа, и я пытаюсь оптимизировать этот процесс, насколько это возможно.Непоследовательный план выполнения SQL Server. Поиск ключевых слов.
В таблице имеется довольно много столбцов, и я добавил некластеризованные индексы на три разных столбца.
SELECT * FROM table WHERE Field1 = 10;
SELECT * FROM table WHERE Field2 = 40;
SELECT * FROM table WHERE Field3 = 'A';
Field1 и Field2 являются целыми полями, а Field3 является varchar.
Когда я запросить предполагаемый план выполнения запроса из SQL Server для этих трех запросов, я получаю в основном один и тот же план для каждого:
SELECT -> Nested Loop -> Index Seek
-> Key Lookup
Но я считаю, что это время выполнения является значительно противоречиво. В частности, второй запрос занимает 98% от общей стоимости запроса. Его план выполнения такой же, как и остальные, за исключением того, что шаг Key Lookup имеет стоимость 100% по сравнению с Index Seek. В двух других запросах он ближе к 50%.
Я понимаю, что поиск ключей нежелателен и его можно избежать, добавив столбцы в индексы, чтобы лишние столбцы не нуждались в поиске. Однако в этом случае я хочу, чтобы все столбцы в таблице были возвращены мне, поэтому нет смысла добавлять их в индекс. Но как один индекс может привести к тому, что операция Key Lookup займет гораздо больше времени, чем другой поиск ключа?