У меня есть следующий вопрос, который делает очень мало и является примером того, какого рода соединения я делаю во всей системе.
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
Как лучше всего улучшить производительность этого типа запроса?