Oprava: Vnější spojení s kritéria filtru před bez výběrové spojení a vnější spojení přiobjednávky

Překlady článku Překlady článku
ID článku: 318530 - Produkty, které se vztahují k tomuto článku.
CHYBA Č: 356418 (SHILOH_BUGS)
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Příznaky

Pokud odešlete dotaz obsahující alespoň jedno vnější spojení, který má podmínku filtru v klauzuli WHERE na vnitřní tabulce vnější spojení (například filtr podmínku na pravé tabulky levé vnější spojení nebo levé tabulky pravé vnější spojení), SQL Server může provést méně výběrové spojení nejprve namísto provádění vnějšího spojení včasné a použití podmínku filtru. Pokud podmínku filtru z vnějšího spojení je jeden více výběrové kritéria pro dotaz, selhání procesu kritéria včasné v plánu může vést k:
  • Větší velikosti zprostředkujících spojení.
  • Vyšší využití prostředků serverem SQL zpracovat.
  • Pomalejší čas odezvy pro dotaz.

Řešení

Rozlišení pro SQL Server 2005

Tento problém vyřešíte pomocí nejnovější aktualizace service pack pro SQL Server 2005. Další informace naleznete následujícím článku znalostní databáze Microsoft Knowledge Base:
913089Jak získat nejnovější aktualizaci service pack pro SQL Server 2005
Po instalaci aktualizace SQL Server 2005 service pack, musíte zapnout příznak trasování 4101 vyřešit tento problém.

Rozlišení pro SQL Server 2000

Tento problém vyřešíte získat nejnovější aktualizaci service pack pro 2000 Microsoft SQL Server. Další informace naleznete následujícím článku znalostní databáze Microsoft Knowledge Base:
290211Jak získat nejnovější aktualizaci Service Pack pro SQL Server 2000
Poznámka: následující oprava hotfix byla vytvořena před vydáním Microsoft SQL Server 2000 Service Pack 3.

Anglická verze této opravy má následující atributy souborů nebo novější:
   Version       File name
   -----------------------------

   8.00.0584     Sqlservr.exe
				
Poznámka: Vzhledem k závislostem souborů nejnovější opravy hotfix nebo funkce, která obsahuje soubory může také obsahovat další soubory.

Prohlášení

Stav pro SQL Server 2005

Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části Informace v tomto článku jsou určeny pro produkt.
Tento problém byl poprvé opraven v Microsoft SQL Server 2005 Service Pack 1.

Stav pro SQL Server 2000

Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části Informace v tomto článku jsou určeny pro produkt.
Tento problém byl poprvé opraven v Microsoft SQL Server 2000 Service Pack 3.

Další informace

Následující scénář contrived spojení používá databázi pubs k předvedení scénář:
set ansi_nulls off
go

use pubs
go

create procedure dbo.ansi_nulls_param @P1 varchar(11) as
select t.title_id, a.au_id, ta.title_id, s.stor_id from titles t 
   left outer join titleauthor ta on ta.title_id = t.title_id
   inner join authors a on a.au_id = t.title_id
   inner join sales s on s.title_id = t.title_id
where ta.title_id = @P1
go

exec dbo.ansi_nulls_param '123-45-6789'
go

drop proc dbo.ansi_nulls_param
go

--Slower Query Plan:
       |--Filter(WHERE:([ta].[title_id]=[@P1]))
            |--Nested Loops(Left Outer Join, OUTER REFERENCES:([t].[title_id]))
                 |--Nested Loops(Inner Join, OUTER REFERENCES:([s].[title_id]))
                 |    |--Nested Loops(Inner Join, OUTER REFERENCES:([s].[title_id]))
                 |    |    |--Index Scan(OBJECT:([pubs].[dbo].[sales].[titleidind] AS [s]))
                 |    |    |--Clustered Index Seek(OBJECT:([pubs].[dbo].[authors].[UPKCL_auidind] AS [a]), SEEK:([a].[au_id]=[s].[title_id]) ORDERED FORWARD)
                 |    |--Clustered Index Seek(OBJECT:([pubs].[dbo].[titles].[UPKCL_titleidind] AS [t]), SEEK:([t].[title_id]=[s].[title_id]) ORDERED FORWARD)
                 |--Index Seek(OBJECT:([pubs].[dbo].[titleauthor].[titleidind] AS [ta]), SEEK:([ta].[title_id]=[t].[title_id]) ORDERED FORWARD)

--Faster Query Plan:
       |--Nested Loops(Inner Join, OUTER REFERENCES:([a].[au_id]))
            |--Nested Loops(Inner Join, OUTER REFERENCES:([t].[title_id]))
            |    |--Filter(WHERE:([ta].[title_id]=[@P1]))
            |    |    |--Nested Loops(Left Outer Join, OUTER REFERENCES:([t].[title_id]))
            |    |         |--Index Scan(OBJECT:([pubs].[dbo].[titles].[titleind] AS [t]))
            |    |         |--Index Seek(OBJECT:([pubs].[dbo].[titleauthor].[titleidind] AS [ta]), SEEK:([ta].[title_id]=[t].[title_id]) ORDERED FORWARD)
            |    |--Clustered Index Seek(OBJECT:([pubs].[dbo].[authors].[UPKCL_auidind] AS [a]), SEEK:([a].[au_id]=[t].[title_id]) ORDERED FORWARD)
            |--Index Seek(OBJECT:([pubs].[dbo].[sales].[titleidind] AS [s]), SEEK:([s].[title_id]=[a].[au_id]) ORDERED FORWARD)
				
Poznámka autorknihy tabulky je pravé tabulky levé vnější spojení a WHERE podmínku klauzule na autorknihy je použita po vnější spojení. Výstup zobrazuje plán původní, pomalejší dotaz vnitřní spojení jsou prováděny nejprve a vnější spojení a filtr je provedena poslední, přestože je většina výběrové podmínku pro dotaz. Vynucené plán, který demonstruje, jak rychlejší plán bude vypadat, ve kterém je druhý dotaz plán vnější spojení a filtr je provedena první, následovaný zbývající vnitřní spojení.

Pro tento konkrétní scénář pokračuje Optimalizátor první plán zvolit i po použití opravy hotfix. Důvodem je, že tyto tabulky jsou tak malá a odhadované náklady první plánu je dostatečně nízká, považována, že jej je za lepší právě spustit s danou plán než pokračovat vyhledávání následných alternativ. Jako data v tabulkách zvýší náklady první plán stane vyšší a Optimalizátor spustí druhé plán zvolit.

Vlastnosti

ID článku: 318530 - Poslední aktualizace: 4. února 2008 - Revize: 5.1
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Workgroup Edition
Klíčová slova: 
kbmt kbhotfixserver kbqfe kbsqlserv2000sp3fix kbbug kbfix kbsqlserv2000presp3fix KB318530 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:318530

Dejte nám zpětnou vazbu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com