sql >> Databáze >  >> RDS >> Sqlserver

Jak mohu vynutit, aby poddotaz fungoval stejně dobře jako #temp tabulka?

Existuje několik možných vysvětlení, proč se toto chování zobrazuje. Některé běžné jsou

  1. Poddotaz nebo CTE mohou být opakovaně přehodnocovány.
  2. Materializace dílčích výsledků do #temp tabulka může vynutit optimálnější pořadí spojení pro tuto část plánu odstraněním některých možných možností z rovnice.
  3. Materializace dílčích výsledků do #temp tabulka může zlepšit zbytek plánu opravou špatných odhadů mohutnosti.

Nejspolehlivější metodou je jednoduše použít #temp stůl a zhmotněte ho sami.

V opačném případě, pokud jde o bod 1, viz Poskytnout nápovědu k vynucení střední materializace CTE nebo odvozených tabulek . Použití TOP(large_number) ... ORDER BY může často povzbudit výsledek k tomu, aby byl zařazován do fronty, než aby byl opakovaně přehodnocen.

I když to funguje, na cívce nejsou žádné statistiky.

U bodů 2 a 3 byste museli analyzovat, proč jste nezískali požadovaný plán. Případné přepsání dotazu tak, aby používal proměnlivé predikáty, nebo aktualizace statistiky může získat lepší plán. Pokud se vám to nepodaří, můžete zkusit získat požadovaný plán pomocí tipů dotazů.



  1. Může někdo doporučit dobrý návod na indexy MySQL, konkrétně při použití v pořadí podle klauzule během spojení?

  2. Simple Rails App:Chyba Nelze navštívit Integer

  3. Rozdělit řetězec do řádků Oracle SQL

  4. Operátor T-SQL XOR