У меня есть запрос, объединяющий несколько таблиц, последняя таблица объединена с помощью LEFT
ПРИСОЕДИНИТЬСЯ. Последний стол
содержит более миллиона строк, и план выполнения показывает сканирование таблицы. я имею
индексированные столбцы
на котором производится соединение. Всегда используется сканирование индекса, но если я заменю LEFT JOIN на INNER JOIN, будет использован поиск индекса
б и исполнение
занимает несколько секунд, но с LEFT JOIN происходит сканирование таблицы, поэтому
выполнение
занимает несколько минут Использование внешних объединений отключает индексы? Пропустил я
что-то?
В чем причина такого поведения?
Вот запрос
Select *
FROM
Subjects s
INNER join Question q ON q.SubjectID = s.SubjectID
INNER JOIN Answer c ON a.QestionID = q.QuestionID
Left outer JOIN Cell c ON c.Question ID = q.QuestionID
Где S.SubjectID = 15
Кластерный индекс по SubjectID в таблице «Subject». и в других таблицах есть некластерный индекс по questionID.
Решение:
Я пытаюсь сделать это по-другому, и теперь я веду поиск по индексу в таблице Cell. Вот модифицированный запрос:
Select *
FROM
Subjects s
INNER join Question q ON q.SubjectID = s.SubjectID
INNER JOIN Answer c ON a.QestionID = q.QuestionID
Left outer JOIN Cell c ON c.Question ID = q.QuestionID
AND C.QuestionID > 0
AND C.CellKey > 0
, где S.SubjectID = 15
Таким образом, я сделал высокую селективность для таблицы Cell. :)