Вот статья на devx.com , в которой говорится:
Создание некластеризованного индекса, который содержит все столбцы, используемые в запросе SQL, - метод , охватывающий индекс
Я могу только предположить, что покрытый запрос - это запрос, имеющий индекс, который охватывает все столбцы в его возвращенном наборе записей. Одно предостережение: индекс и запрос должны быть построены так, чтобы сервер SQL мог фактически сделать вывод из запроса, что индекс полезен.
Например, объединение таблицы само по себе может не иметь такого индекса (в зависимости от интеллекта планировщика выполнения SQL-запросов):
PersonID ParentID Name
1 NULL Abe
2 NULL Bob
3 1 Carl
4 2 Dave
Давайте предположим, что на PersonID,ParentID,Name
есть индекс - это будет покрывающий индекс для запроса, подобного:
SELECT PersonID, ParentID, Name FROM MyTable
Но такой запрос:
SELECT PersonID, Name FROM MyTable LEFT JOIN MyTable T ON T.PersonID=MyTable.ParentID
Вероятно, это не принесет столько пользы, даже если все столбцы в индексе. Зачем? Потому что вы на самом деле не говорите, что хотите использовать тройной индекс PersonID,ParentID,Name
.
Вместо этого вы строите условие, основанное на двух столбцах - PersonID
и ParentID
(в котором отсутствует Name
), а затем запрашиваете все записи со столбцами PersonID, Name
. На самом деле, в зависимости от реализации, индекс может помочь последней части. Но для первой части вам лучше иметь другие индексы.