Я обнаружил, что в некоторых случаях в некоторых случаях такое запрос
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 тысяч строк. Интересно, что вставка верхнего пункта в исходный запрос делает его выполнять наравне с запросом соединения:
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
У кого-нибудь есть идеи, почему оригинальный запрос выполняет так плохо?