Выполнение запроса SQL Server - удаление необходимости в Hash Match (Inner Join)

У меня есть следующий вопрос, который делает очень мало и является примером того, какого рода соединения я делаю во всей системе.

select t1.PrimaryKeyId, t1.AdditionalColumnId
from TableOne t1
    join TableTwo t2 on t1.ForeignKeyId = t2.PrimaryKeyId
    join TableThree t3 on t1.PrimaryKeyId = t3.ForeignKeyId
    join TableFour t4 on t3.ForeignKeyId = t4.PrimaryKeyId
    join TableFive t5 on t4.ForeignKeyId = t5.PrimaryKeyId
where 
    t1.StatusId = 1
    and t5.TypeId = 68

На всех столбцах соединения есть индексы, однако производительность невелика. Проверка план запроса показывает много Hash Match (Внутренние соединения), когда на самом деле я хочу видеть Вложенный цикл соединений.

Количество записей в каждой таблице следующее:

select count(*) from TableOne

= 64393

select count(*) from TableTwo

= 87245

select count(*) from TableThree

= 97141

select count(*) from TableFour

= 116480

select count(*) from TableFive

= 62

Как лучше всего улучшить производительность этого типа запроса?

20
задан Tim Peel 28 August 2011 в 14:00
поделиться