SQL Query Performance

v tomto konkrétním případě si nevšimnete obrovského rozdílu, protože 30 000 řádků není pro zpracování databáze příliš těžké. Nicméně, pokud jste mluvili o stovkách milionů řádků nebo více, viděli byste znatelné zlepšení agregací před připojením. Když to uděláte, ujistěte se, že to, co děláte, je logicky konzistentní — měli byste se starat o přesnost své práce, než se obáváte rychlosti běhu.

13 tipy pro výkon dotazu

nezapomeňte prefixovat názvy objektů (tj. tabulka, uložená procedura, pohled) s názvem vlastníka / schématu.

důvod: pokud není uveden název vlastníka / schématu, motor SQL Serveru se pokusí najít ve všech schématech, dokud jej objekt nenajde. SQL Server engine nebude hledat tabulku mimo vlastníka / schéma, pokud je uveden název vlastníka/schématu.

operátor *

nepoužívejte operátor * ve výpisech SELECT. Místo toho použijte názvy sloupců.

důvod: SQL Server vyhledá všechny názvy sloupců a nahradí * se všemi názvy sloupců tabulky(y) v příkazu SQL SELECT. Poskytování názvů sloupců zabraňuje tomuto vyhledávání a nahrazování a zvyšuje výkon.

Nulovatelné sloupce

nepoužívejte NOT in Při porovnání s nulovatelnými sloupci. Místo toho neexistuje použití.

důvod: pokud není v dotazu použit (i když dotaz nevrací řádky s hodnotami null), SQL Server zkontroluje každý výsledek, aby zjistil, zda je null nebo ne. Použití neexistuje nebude dělat srovnání s nully. Také neexistuje vrací pouze dva stavy (true nebo false), zatímco ne v může vrátit až tři stavy (true, false, NULL) a nemusí vám výsledek, který jste očekávali.

proměnné tabulky a spojení

nepoužívejte proměnné tabulky ve spojích. Místo toho použijte dočasné tabulky, CTE (Common Table Expressions) nebo odvozené tabulky ve spojích.

důvod: i když proměnné tabulky jsou v mnoha situacích velmi rychlé a efektivní, SQL Server engine to vidí jako jeden řádek. Z tohoto důvodu SQL vytvoří plán provádění, který bude při použití v joinech příšerně fungovat.

Názvy uložených procedur

nezačínejte název uložené procedury pomocí sp_.

důvod: když je uložená procedura pojmenována sp_ nebo SP_, SQL Server vždy zkontroluje v databázi system / master, i když je uveden název vlastníka/schématu. Zadání názvu bez SP_ uložené proceduře zabrání této zbytečné kontrole v systémové / Hlavní databázi v SQL Serveru.

použijte SET NOCOUNT ON

použijte SET NOCOUNT ON s operacemi DML.

důvod: při provádění operací DML (tj. Vložit, odstranit, vybrat a aktualizovat), SQL Server vždy vrátí počet dotčených řádků. U složitých dotazů se spoustou spojení se to stává obrovským problémem s výkonem. Použití SET NOCOUNT ON zlepší výkon, protože nebude sledovat počet řádků postižených.

nepoužívejte GROUP BY, ORDER BY a DISTINCT

nepoužívejte GROUP BY, ORDER BY a DISTINCT, kdykoli je to možné.

důvod: při použití GROUP BY, ORDER BY nebo DISTINCT vytvoří SQL Server engine pracovní tabulku a umístí data na pracovní stůl. Poté organizuje tato data v pracovní tabulce podle požadavku dotazu a poté vrátí konečný výsledek.

zkontrolujte indexy

na všech polích použitých v části where and JOIN příkazu SQL by měly být indexy.

důvod: pokud nejsou pole indexována, SQL Server obvykle provede úplnou kontrolu tabulky, což může snížit výkon. Pokud není tabulka velmi malá, skenování tabulky má tendenci přinést nejhorší výkon ze všech typů čtení databáze.

použijte stejný datový typ na JOIN a kde klauzule

to se snadněji řekne, než udělá v závislosti na vašich oprávněních provádět změny schématu.

důvod: při spojování nebo porovnávání dvou polí s různými datatypy musí SQL provést on-the-fly konverzi pole, než může provést srovnání, i když jsou pole indexována. Pokud jsou neodpovídající datové typy nevyhnutelné, pokuste se obsadit větší datový typ do menšího datového typu, kdykoli je to možné.

Vyhněte se použití vypočtených polí v JOIN a kde klauzule

to lze provést vytvořením pole s vypočtenými hodnotami použitými v join v tabulce. Nížit.

Leave a Reply

Vaše e-mailová adresa nebude zveřejněna.