Написал запрос вида
select t1.f1,t1.f2,t2,f1,t3.f1 from table1 t1
left outer join table2 on ( .... )
left outer join table3 t3 on ( t3.FK=(select top 1 PK form Table4 where f1=t1.f1 ...) )
На 2000-ом SQL Server'е запрос отрабатывал долго, но работал .
На 7-ом SQL Server'е запрос работал очень долго и в конце-концов приходило сообщение о тайауте.
Начал эксперементировать,
сначала заменил второй
left outer join
на
inner join
, запрос работал с такой же скоростью как на 2000-м но выдавал не все интересующие данные.
Потом вернул
left outer join
на место, по заменил
t3.FK=(select top 1 PK form Table4 where f1=t1.f1 ...)
на
t3.FK in (select top 1 PK form Table4 where f1=t1.f1 ...)
и запрос стал просто летать(скорость раз в 5 увеличилась) на 7-м, 2000-й к сожаления снес и проверить не смог.
Стало еще интереснее, уже в измененном запросе снова заменил второй
left outer join
на
inner join
, запрос снова работал долго и ушел в таймаут.
Кто-нибудь может сказать почему так?