SQL Server Присоединяйтесь к вопросу производительности SUSQUERY

Я обнаружил, что в некоторых случаях в некоторых случаях такое запрос

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

У кого-нибудь есть идеи, почему оригинальный запрос выполняет так плохо?

6
задан Adriano Carneiro 8 September 2011 в 14:14
поделиться