odkryłem, że w niektórych przypadkach zapytania jakserwer SQL przyłączyć vs kwestii wydajności Podzapytanie
select
usertable.userid,
(select top 1 name from nametable where userid = usertable.userid) as name
from usertable
where active = 1
bierze rząd wielkości dłużej, aby zakończyć w SS2008R2 niż równowartość zapytania z join
select
usertable.userid,
nametable.name
from usertable
left join nametable on nametable.userid = usertable.userid
where usertable.active = 1
gdzie zarówno tabele są indeksowane i mają ponad 100 tys. wierszy. Co ciekawe, wkładając górną klauzuli do oryginalnego zapytania czyni go wykonać na równi z kwerendy dołączyć:
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
Czy ktoś ma jakiś pomysł, dlaczego pierwotne zapytanie wykonuje tak źle?
FYI podczas diagnozowania problemów z wydajnością należy zawsze uzyskać plan wykonania kwerendy. – Justin
Jeśli masz dostęp do Safari Books Online, spójrz na "Inside Microsoft® SQL Server 2005: Tuning zapytań i optymalizacja - rozdział 3" lub Inny dobry link http://blogs.msdn.com/b/craigfr/archive/2006 /09/27/774107.aspx –