První Run
query
z Sql Server Management Studio
a podívejte se na plán dotazu, kde je hrdlo láhve. Každé místo, kde vidíte „skenování tabulky“ nebo „skenování indexu“, musí projít všechna data, aby našlo, co hledá. Pokud vytvoříte vhodné indexy, které lze pro tyto operace použít, mělo by to zvýšit výkon.
Níže je uvedeno několik tipů pro zlepšení výkonu dotazu SQL..
Vyhněte se vícenásobným spojením v jednom dotazu
Pokuste se vyhnout psaní dotazu SQL pomocí více spojení, která zahrnují vnější spojení, křížové použití, vnější použití a další složité dílčí dotazy. Omezuje možnosti optimalizace při rozhodování o pořadí spojení a typu spojení. Někdy je Optimizer nucen používat vnořená spojení smyček, bez ohledu na důsledky pro výkon u dotazů s příliš složitými křížovými dotazy nebo dílčími dotazy.
Odstranění kurzorů z dotazu Pokuste se odebrat kurzory z dotazu a použít dotaz založený na sadě; dotaz založený na sadě je efektivnější než založený na kurzoru. Pokud je potřeba použít kurzor, vyhněte se dynamickým kurzorům, protože to má tendenci omezovat výběr plánů dostupných optimalizátoru dotazů. Například dynamický kurzor omezuje optimalizátor na použití vnořených spojení smyčky.
Vyhněte se použití nekorelovaného skalárního dílčího dotazu Dotaz můžete přepsat, abyste odstranili nekorelovaný skalární dílčí dotaz jako samostatný dotaz namísto části hlavního dotazu a výstup uložit do proměnné, na kterou lze odkazovat v hlavním dotazu nebo pozdější části dávky. Optimalizátor tak získá lepší možnosti, což může pomoci vrátit přesné odhady mohutnosti spolu s lepším plánem.
Vyhněte se vícepříkazovým funkcím s hodnotou tabulky (TVF) Vícepříkazové TVF jsou dražší než inline TFV. SQL Server rozšiřuje inline TFV do hlavního dotazu, jako když rozšiřuje pohledy, ale vyhodnocuje vícepříkazové TVF v kontextu odděleném od hlavního dotazu a zhmotňuje výsledky vícepříkazů do dočasných pracovních tabulek. Oddělený kontext a pracovní tabulka činí vícevýkazové TVF nákladnými.
Vytvořte vysoce selektivní index Selektivita definuje procento způsobilých řádků v tabulce (kvalifikační počet řádků/celkový počet řádků). Pokud je poměr kvalifikačního počtu řádků k celkovému počtu řádků nízký, je index vysoce selektivní a je nejužitečnější. Neshlukovaný index je nejužitečnější, pokud je poměr kolem 5 % nebo méně, což znamená, že index může vyloučit 95 % řádků. Pokud index vrací více než 5 % řádků v tabulce, pravděpodobně nebude použit; buď bude vybrán nebo vytvořen jiný index, nebo bude naskenována tabulka.
Umístění sloupce v rejstříku Pořadí nebo pozice sloupce v indexu také hraje zásadní roli pro zlepšení výkonu dotazů SQL. Index může pomoci zlepšit výkon dotazu SQL, pokud kritéria dotazu odpovídají sloupcům, které jsou nejvíce vlevo v klíči indexu. Nejlepším postupem je umístit většinu selektivních sloupců v klíči neseskupeného indexu zcela vlevo.
Zahození nepoužívaných indexů Odstranění nepoužívaných indexů může pomoci urychlit úpravy dat, aniž by to ovlivnilo načítání dat. Také musíte definovat strategii pro dávkové procesy, které se nespouštějí často a používají určité indexy. V takových případech vytvoření indexů před dávkovými procesy a jejich odstranění po dokončení dávkových procesů pomáhá snížit režii databáze.
Vytváření a aktualizace statistik Musíte se postarat o vytváření statistik a pravidelné aktualizace pro počítané sloupce a vícesloupce uvedené v dotazu; optimalizátor dotazů používá informace o rozložení hodnot v jednom nebo více sloupcích statistiky tabulky k odhadu mohutnosti neboli počtu řádků ve výsledku dotazu. Tyto odhady mohutnosti umožňují optimalizátoru dotazů vytvořit vysoce kvalitní plán dotazů.
Vraťte se k definicím schémat V neposlední řadě si znovu projděte definice schématu; dávejte pozor, zda jsou nebo nejsou nastavena vhodná omezení FORIGEN KEY, NOT NULL a CEHCK. Dostupnost správného omezení na správném místě vždy pomáhá zlepšit výkon dotazu, jako omezení FORIGEN KEY pomáhá zjednodušit spojení převodem některých vnějších nebo semi-spojení na vnitřní spojení a omezení CHECK také trochu pomáhá odstraněním nepotřebných nebo nadbytečných predikátů.