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