Я обнаружил, что в некоторых случаях такой запрос, как
select
usertable.userid,
(select top 1 name from nametable where userid = usertable.userid) as name
from usertable
where active = 1
, занимает на SS2008R2 на порядок больше времени, чем эквивалентный запрос соединения
select
usertable.userid,
nametable.name
from usertable
left join nametable on nametable.userid = usertable.userid
where usertable.active = 1
, где обе таблицы индексируютсяи иметь более 100 тысяч строк.Интересно, что вставка предложения top в исходный запрос заставляет его работать наравне с запросом на соединение:
select
top (select count(*) from usertable where active = 1) usertable.userid,
(select top 1 name from nametable where userid = usertable.userid) as name
from usertable
where active = 1
Кто-нибудь знает, почему исходный запрос выполняется так плохо?