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

Proč tento (nekorelovaný) poddotaz způsobuje takové problémy?

Mám zkušenost, že čím jsou vaše dotazy složitější, tím méně je optimalizátor SQL schopen vytvářet obratné plány. Tady máte 16 spojení, některé nebo většina jsou vnější spojení, máte alespoň jeden poddotaz... vhoďte dostatek indexů, mohutností, pohledů, vnější platí a kdo ví co ještě a nikdo, ani Microsoft inženýři*, mohou vymyslet rutiny, které budou jednotně a pravidelně generovat ty nejoptimálnější plány.

To, co jste popsal, jsem zažil mnohokrát - změňte jednu jednoduchou věc v chaotickém dotazu a vše je o řád rychlejší (nebo, skřípění zubů, pomaleji). Nemám žádnou metodu, jak určit, kdy je komplex příliš složitý, je to spíše pocit než cokoli jiného. Mým obecným pravidlem je, že pokud to vypadá příliš dlouho nebo příliš složitě, zjednodušte, kde můžete – například předem vybranou jednu vnořenou hodnotu nebo vylomte část dotazu, než se to bude vždy běžet rychle s malou sadou výsledků a nejprve ji spustit a uložit výsledky do dočasné tabulky.

( * Upozorňujeme, že se jedná o mírný sarksam)



  1. nelze se připojit k databázi MySQL pomocí externí IP adresy

  2. Problém Django inspectdb pomocí databáze Oracle

  3. Použití UNION ALL v STUFF / XML Path

  4. MySQL SELECT id řádku, kde GREATEST z MAX záznamů několika sloupců