Индексирование предложения WHERE OUTER/CROSS APPLY с помощью INCLUDE
Я прочитал, что индексные столбцы должны использоваться при использовании предложения WHERE для ограничения возвращаемых записей (т.е. SELECT * from Table1 WHERE Field1 = 'abc'
).
Применяется ли это правило при использовании APPLY
, как в
SELECT t.Field1,x.Field2 from Table1 t
OUTER APPLY (select * from Table2 x WHERE t.Field1 = x.Field1
?
Другими словами, ускорит ли размещение индекса Table2.Field1 вышеупомянутый запрос?
Извините, если ответ очевиден, у меня нет четкого понимания механизма OUTER и CROSS APPLY, только то, что они могут использоваться вместо JOIN.
РЕДАКТИРОВАТЬ Лучший вопрос, основанный на этом потоке ( жесткие и быстрые правила для включения столбцов в Index), должен ли я использовать INCLUDE для всех столбцов, которые я извлекаю из другой таблицы, и если да, то будет ли он более эффективным? использовать OUTER APPLY (select Field1,Field2
вместо OUTER APPLY (select *
2 ответа
Столбец, который используется в OUTER Apply, должен быть проиндексирован и должен использоваться для объединения с основным запросом, что улучшит процесс поиска запроса, так как он будет использоваться при поиске по кластерному индексу, и это сделает запрос быстрее, а план выполнения будет повторно использован в успешный поиск.
Что ж, всякий раз, когда вы указываете условие для столбца, индекс поможет ускорить поиск.
Однако это обходится дорого: во время вставки индекс необходимо будет пересчитать, и, конечно, вам потребуется место на диске. Но помимо этого индексы имеют (почти) только преимущества.