Složité SQL dotazy jsou vynikající k tomu, aby bylo vyhledávání v databázi velmi specifické a flexibilní, ale také mohou být těžko pochopitelné a téměř nemožné je odladit – a na jejich opětovné použití můžete také zapomenout.
Když dotazy přesahují vaše standardní příkazy SELECT a WHERE, můžete dokonce zjistit, že výkon SQL Serveru začne trpět, protože optimalizátory dotazů mají potíže se zpracováním dlouhých a složitých dotazů.
Pokud si všimnete, že vaše dotazy SQL používají nadměrný počet složitých spojení a poddotazů, vnořují dotazy do klauzulí WHERE a spoléhají na mnoho klauzulí AND a OR, je pravděpodobně vhodný čas ustoupit a hledat způsoby, jak minimalizovat část složitosti.
Tipy pro minimalizaci složitosti dotazů na SQL Server
Jak jsme zmínili výše, optimalizátory dotazů SQL Server nemají v lásce složité dotazy SQL. Zde je pět způsobů, jak zjednodušit vaše dotazy, aby mohly být optimalizovány pro lepší výkon.
1. Pokud je to možné, odstraňte klauzule NEBO
Nejjednodušší způsob, jak zjednodušit dotazy, je odstranit klauzule OR, kdykoli je to možné. Protože OR je inkluzivní, SQL Server musí zpracovat každou součást klauzule samostatně, což skutečně zpomaluje operace.
Když není možné odstranit OR, další nejlepší možností je rozdělit dlouhé a složité dotazy na menší. Zdá se trochu neintuitivní, že zpracování více dotazů je rychlejší než zpracování jednoho, ale pokud jde o NEBO, je lepší jít s více dotazy.
2. Jemné doladění vyhledávání řetězců
SQL Server dělá spoustu věcí dobře, ale hledání fuzzy řetězců mezi ně nepatří. Vyhledávání řetězců pomocí zástupných znaků, zejména u velkých tabulek, je neefektivní a špatné pro výkon.
Existuje několik vylepšení, která můžete použít na vyhledávání řetězců, které pomáhají minimalizovat dopad na výkon.
- Namísto hledání pomocí zástupných znaků použijte vyhledávání se zahajovacím řetězcem (tj. změňte „%For%“ na „For%“)
- Před spuštěním vyhledávání řetězců použijte na dotaz filtry, jako je datum nebo čas, abyste zmenšili velikost dat.
- Použijte fulltextové indexování ke generování indexů, které umožňují flexibilní vyhledávání řetězců v textových sloupcích
3. Dejte si pozor na velké operace zápisu
Velké operace zápisu způsobují spory a generují mnoho souborů protokolu. Pokud není zaškrtnuto, velké operace zápisu mohou blokovat zdroje od uživatelů a vytvářet problémy s latencí a také vyplňovat transakční protokoly nebo dokonce fyzické úložiště.
Protože se nemůžete vždy vyhnout velkým operacím zápisu, buďte si vědomi toho, kdy je spouštíte (čím méně vytížený server, tím lépe) nebo snižte počet řádků upravených na operaci, abyste minimalizovali riziko sporu.
4. Vyčistit indexy
Indexy jsou jedním z hlavních viníků, pokud jde o nízký výkon, ale když se snažíte optimalizovat složité dotazy SQL, indexy vyžadují určité zvláštní úvahy.
SQL Server má několik nástrojů, které vás upozorní, když chybějící indexy ovlivňují výkon dotazů. Než se však pustíte do přidávání indexů, musíte určit, zda dodatečný index zlepší dotaz natolik, aby to stálo za námahu. Pokud se například dotaz spustí 1 milionkrát denně a index jej vylepší o 25 procent, pravděpodobně to stojí za to. Pokud se dotaz používá zřídka, nemusí dávat smysl.
Několik dalších věcí, které je třeba zvážit, než začnete přidávat indexy, je, zda lze stávající indexy upravit tak, aby pokryly tento případ použití bez přidání nového, a zda tento index již existuje, ale optimalizátor ho z nějakého důvodu ignoruje.
Dalšími způsoby, jak mohou indexy ovlivňovat výkon dotazů, jsou přeindexování nebo podindexování tabulek a tabulek, které postrádají seskupený index nebo primární klíč. Vyřešení těchto problémů pomůže s výkonem komplexních dotazů SQL.
5. Udržujte odpočet tabulky
Pokaždé, když do dotazu přidáte tabulku, bude dotaz složitější. Nadměrné množství tabulek často vede ke špatným plánům provádění, protože optimalizátor dotazů nemůže pracovat efektivně.
Pokud si všimnete, že složitý dotaz funguje špatně a má mnoho tabulek, může to být jeden z těch případů, kdy je rozdělení dotazu na menší dotazy nejlepší volbou, protože to ulehčí část zátěže optimalizátoru.
Nástroje pro ladění výkonu mohou pomoci minimalizovat složitost serveru SQL
Když složité dotazy zablokují optimalizátor dotazů, často skončíte s neefektivním plánem provádění a výkon utrpí. Kromě výše uvedených tipů jsou nástroje pro ladění výkonu cenným zdrojem pro minimalizaci složitosti dotazů na SQL Server a optimalizaci výkonu.
Níže je uvedeno několik možností, které byste měli hledat při hledání řešení pro ladění výkonu.
Analýza plánu provádění SQL serveru
Nástroj pro ladění by měl analyzovat váš plán provádění a určit, co je třeba změnit, aby SQL Server prováděl operace efektivněji.
Vizualizace plánu provádění SQL serveru
Nástroj pro ladění by měl prezentovat plán provádění způsobem, který je snadno pochopitelný a pomáhá vám najít operace, které zpomalují provádění.
Automatická optimalizace SQL
Nástroj pro ladění by měl analyzovat váš SQL a poté jej automaticky přepisovat, dokud nedosáhne maximálního zlepšení doby provádění.
Porovnání optimalizovaných a původních příkazů SQL
Nástroj pro ladění by měl zvýraznit změny v příkazu SQL, abyste mohli porovnat původní a optimalizované verze před nasazením změn.
Porovnání plánů spouštění serveru SQL Server
Nástroje pro ladění by měly poskytovat srovnání původních a optimalizovaných plánů provádění, abyste věděli, co se mezi verzemi změnilo.
Statistický důkaz
Váš nástroj pro ladění by měl poskytovat data, která ukazují, proč se optimalizovaný SQL provádí rychleji než původní příkaz SQL.
Složité dotazy SQL Server mohou mít negativní dopad na výkon systému. Použijte tyto tipy a vysoce kvalitní řešení pro ladění výkonu k odstranění složitosti a optimalizaci efektivity dotazů SQL.