Přijetí správné syntaxe SQL a postupů při psaní dotazů zlepší efektivitu monitorování databáze a v důsledku toho zlepší celkový výkon databáze. Existuje několik osvědčených způsobů, jak zlepšit výkon databáze pomocí úprav syntaxe a dotazů. Vybrali jsme 5, na které se zaměříme.
1. Výrazy CASE
Zde je několik doporučených postupů pro dosažení nejlepšího výkonu z výrazů CASE:
- Výrazy CASE zlepšují výkon přesunem starého procedurálního kódu do deklarativního kódu, který lze následně optimalizovat. Pro základní výrazy CASE použijte
, který se nejsnáze optimalizuje. Pro rozšířené výrazy CASE budou nejužitečnější hašování a další techniky. - Protože KDYŽ se klauzule testují zleva doprava, je nejlepší uspořádat klauzule tak, aby byly ty nejpravděpodobnější uvedeny jako první. Tím se zkrátí čas strávený zbytečným skenováním.
- Většina optimalizátorů také bere v úvahu redundantní testy tím, že zvažuje pořadí provádění. Jakmile se klauzule WHEN spustí, není nutné tuto klauzuli znovu testovat. Mnoho optimalizátorů však neumí číst vnořené výrazy CASE, takže je nejlepší je srovnat na jednu úroveň.
2. Dvojité ponoření a klauzule okna
V SQL znamená „double-dipping“ návštěvu stejné tabulky více než jednou, což zpomaluje váš dotaz. V ideálním případě se snažte zvládnout všechny své úkoly během jediné návštěvy stolu. Pokud to však není možné, existuje několik způsobů, jak zmírnit dopad na výkon.
Používání dočasných stolů vytvořených ze stejného základního stolu spojených dohromady opravdu není nejlepší způsob, jak se vyhnout dvojitému namáčení. Lepším řešením je použít optimalizátor vašeho SQL motoru k zobrazení ZOBRAZENÍ a sdílení výsledků jako pracovní tabulky.
Pokud jste omezeni na méně než hvězdný optimalizátor, použijte dočasné tabulky a proveďte práci ručně.
Ačkoli jsou výše uvedené metody naprosto přijatelné, nejlepším způsobem, jak se vyhnout dvojitému ponoření, je použití klauzule okna, protože dílčí klauzule fungují podobně jako funkce poddotazů. Například:
- Klauzule PARTITION BY je jako místní GROUP BY, která rozděluje tabulku do seskupení.
- Klauzule ORDER BY ukládá seřazené pořadí.
- Rám okna (ROW nebo RANGE) je jako místní klauzule WHERE.
Funkce okna můžete optimalizovat podle následujících pravidel:
- V indexu seřaďte nejprve sloupce klauzule PARTITION BY a poté sloupce použité v klauzuli ORDER BY.
- Zahrňte všechny ostatní sloupce odkazované v dotazu jako zahrnuté sloupce indexu.
3. Použijte uložené procedury
Objektově relační mapovače (ORM) způsobují řadu problémů s výkonem, když generují svůj vlastní kód. Pokud musíte používat ORM, napište si vlastní uložené procedury, aby výkon neutrpěl.
Existuje mnoho způsobů, jak používání uložených procedur zlepšuje výkon, včetně:
- Posílají po síti méně dat, takže transakce jsou rychlejší
- Umožňují kratší hovory
- Uložené procedury lze snadněji sledovat v nástrojích profilu
- Protože uložená procedura je skutečným objektem ve vaší databázi, je snazší získat statistiky výkonu, což usnadňuje nalezení problémů s výkonem.
- Zvyšuje se opětovné použití plánu provádění
- Usnadňují řešení hraničních případů a přidávají chování auditování nebo zamykání změn
- Uložené procedury nejsou zranitelné vůči útokům SQL injections
4. DELETE a UPDATE v dávkách
Odstranění nebo aktualizace velkého množství dat z prohledávání velkých tabulek vyžaduje velké množství prostředků, protože oba příkazy běží jako jedna transakce. To je zabiják výkonu, protože pokud dojde k chybě během transakce a vy ji potřebujete zastavit, systém musí celou transakci vrátit zpět. Vrácení velkého množství dat zpět spotřebovává spoustu času a blokuje další transakce.
Tomuto problému s výkonem se můžete vyhnout prováděním aktualizací a mazání v malých dávkách. Když tyto transakce spouštíte v dávkách, pokud dojde k zabití transakce, návratnost je mnohem menší. Vrácení malého množství dat netrvá příliš dlouho a ostatní transakce mohou fungovat, zatímco se dávka zapisuje na disk.
5. Nenačítat více sloupců, než potřebujete
Jednou z hlavních příčin nedostatečně výkonných dotazů je načítání nadbytečných sloupců. Vyhněte se postupům, které běžně vedou k vracení nadměrného počtu sloupců. Mějte na paměti následující:
- Zbytečné použití „SELECT *“ v dotazu pravděpodobně vrátí více sloupců, než potřebujete. Jedná se o plýtvání zdroji a zamykání zdrojů od ostatních uživatelů. Je obzvláště důležité nepoužívat bez rozdílu „SELECT *“ ve sloupcových databázích SQL.
- Vyjmutí a vložení za účelem opětovného použití kódu může vést k nadbytečným sloupcům.
- Když vyvoláte VIEW, můžete skončit s vnořenými sloupci. Zrušte vnoření dotazů s nízkou výkonností, abyste zkontrolovali, které sloupce tam jsou, a zbavte se nadměrně velkých sloupců, které nepotřebujete. Dobrým znamením, že máte problém, je, že máte klauzuli WHERE s dalšími podmínkami a klauzuli FROM s dalšími vnějšími spojeními.
To je jen několik způsobů, jak může svědomitý přístup k syntaxi SQL a psaní dotazů zlepšit monitorování databáze. Nebojte se vyzkoušet i jiné. Vysoce výkonná databáze je klíčem ke splnění obchodních cílů v každé organizaci.