Индекс с левым соединением всегда есть сканирование индекса в SQL Server 2005 - PullRequest
0 голосов
/ 28 октября 2011

У меня есть запрос, объединяющий несколько таблиц, последняя таблица объединена с помощью 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. :)

1 Ответ

0 голосов
/ 28 октября 2011

Я только что попытался смоделировать ту же проблему, однако нет сканирования таблицы, вместо этого он использовал кластеризованный индекс ячейки, в то же время вы можете попытаться форсировать индекс, вы можете проверить синтаксис здесь и проблемы, с которыми вы можете столкнуться при форсировании индекса здесь .Надеюсь, это поможет.

...