sql >> Databáze >  >> RDS >> Database

9 osvědčených postupů pro psaní SQL dotazů

Pokud čtete tento článek, s největší pravděpodobností jste již obeznámeni s SQL. Víte, jak psát základní SQL dotazy. Existuje mnoho způsobů, jak provést SQL dotaz, abyste získali požadované výsledky ve vaší databázi.

Ne všechny SQL dotazy jsou však vytvořeny stejně. Většinu lze optimalizovat tak, aby se řídila osvědčenými postupy pro dotazy SQL. Tento článek se zaměřuje na 9 tipů pro optimalizaci dotazů SQL. Po přečtení budete vědět, co dělat a co nedělat při psaní SQL dotazů.

1. Vyhněte se použití SELECT hvězdičky (SELECT *)

Toto je jeden z nejdůležitějších osvědčených postupů SQL. Dotaz SELECT * vrací záznamy ze všech sloupců tabulky. I když je tento dotaz v některých případech užitečný, často způsobuje četné komplikace:

  • Možná nebudete muset načíst všechny sloupce. SELECT * je však vrátí všechny, což spotřebovává nadměrnou šířku pásma pro provádění dotazu přes síť.
  • Názvy sloupců v tabulce lze změnit nebo odebrat a lze přidat nové sloupce. Proto můžete obdržet neočekávané výsledky pro dotaz SELECT *. Zadání názvů sloupců je lepší nápad.
  • SELECT * je pomalejší než SELECT Column Names, protože SELECT může používat indexy sloupců k vrácení dat.
  • Pořadí sloupců vrácených funkcí SELECT * nemáte pod kontrolou. Požadované pořadí však definujete při zadávání názvů sloupců.

2. Přesně používejte doložky WHERE a HAVING

Klauzule WHERE a HAVING v SQL mají různé funkce. Proto bychom je měli používat jinak. Níže jsou uvedeny tři hlavní případy použití WHERE a HAVING:

  • WHERE lze použít s dotazy CRUD, tj. SELECT, INSERT, UPDATE, DELETE. Na druhou stranu HAVING můžete použít pouze s příkazem SELECT.
  • WHERE filtruje data před jakoukoli operací agregace, jako je GROUP BY. Poté jej lze použít bez jakékoli agregační funkce. HAVING by měl být použit po agregaci.
  • Můžeme použít agregační funkce, jako je SUM, MIN, MAX COUNT s klauzulí HAVING. S klauzulí WHERE nemůžeme používat agregační funkce, pokud tato klauzule není součástí dílčího dotazu obsaženého v klauzuli HAVING.

3. Pro spojování tabulek použijte místo klauzule WHERE dotaz INNER JOIN

Dotaz JOIN je pravděpodobně jedním z nejužitečnějších SQL dotazů. Umožňuje SELECT data z více tabulek. Ačkoli můžete použít klauzuli WHERE k získání agregovaných dat ze dvou tabulek, klauzule WHERE je vysoce neefektivní.

Klauzule WHERE vrací CROSS JOIN, což je kartézský součin záznamů v obou sloupcích. Pokud máte například 1 000 záznamů v tabulce A a stejný počet záznamů v tabulce B, klauzule WHERE vytvoří CROSS JOIN s 1 000 x 1 000 =1 000 000 záznamů.

Pokud mají sloupce tabulek A a B zahrnuté v klauzuli WHERE pouze 1 000 společných hodnot, klauzule WHERE vrátí 1 000 záznamů z původních 1 000 000 záznamů vytvořených kartézským součinem.

Klauzule INNER JOIN vrátí pouze 1 000 záznamů, kde tabulky A i B mají ve sloupcích společné hodnoty. V tomto případě má INNER JOIN 1 000x méně práce než klauzule WHERE.

Některé databáze převádějí klauzuli WHERE v dotazu JOIN na klauzuli INNER JOIN za scénou. Vždy se však doporučuje, abyste místo klauzule WHERE použili explicitně INNER JOIN, abyste dodrželi doporučené postupy kódování SQL.

4. Použijte EXISTS, NOT EXISTS namísto IN a NOT IN v SQL

Vždy použijte EXIST přes klauzuli IN, pokud chcete potvrdit existenci hodnoty v konkrétní tabulce.

Proces, který provádí klauzuli EXISTS, se zastaví, jakmile nalezne požadovanou hodnotu v tabulce. Na druhou stranu dotaz IN prohledá vše i po nalezení potřebné hodnoty.

Stejně tak byste měli vždy použít NOT EXISTS místo NOT IN, když hledáte hodnotu, která v tabulce neexistuje.

5. Použijte operátor rovná se (=) místo LIKE Operátor v SQL

Ke spárování řetězců můžete použít oba operátory =a LIKE. Hlavní rozdíl mezi těmito dvěma je v tom, že operátor LIKE se používá pro párování zástupných znaků, jako je %, k hledání částečných řetězců, zatímco operátor rovná se „=“ hledá přesné shody.

Pokud si musíte vybrat mezi těmito dvěma, vždy preferujte operátor rovná se („=“), protože využívá indexované sloupce. Je tedy rychlejší než klauzule LIKE.

6. Použijte klauzuli LIMIT ke snížení výsledků vyhledávání

Pokud musíte vrátit data z více tabulek nebo sloupců, použijte klauzuli LIMIT (známou také jako klauzule TOP) ke snížení výsledků dotazu. Pokud se jedná o tisíce sloupců nebo chcete vidět, jak data vypadají pouze ve vašich tabulkách, není nutné vracet všechny řádky. Místo toho omezte počet řádků vrácených dotazem SELECT pomocí klauzule LIMIT ve spojení s ním.

7. Při dotazování na více tabulek použijte aliasy tabulek

Abyste předešli zmatkům a zabránili databázím v analýze názvů sloupců při hledání tabulky, do které patří, vždy používejte aliasy tabulek.

Pokud máte ve více tabulkách stejné názvy sloupců, musíte již používat názvy/aliasy tabulek, takže to nezvýší vaši pracovní zátěž.

8. Vyhněte se předponu uložených procedur pomocí „sp_“

Pokud jste pracovali s uloženými procedurami, pak jste s největší pravděpodobností dali před název uložené procedury „sp_“. Tohle není nejlepší.

SQL Server začíná hledáním uložených procedur s „sp_“ na začátku jejich názvů v hlavní databázi, než pokračuje hledání jinde.

Proto můžete ušetřit spoustu času tím, že uloženým procedurám nebudete dávat předponu „sp_“. Potom místo pokusu o nalezení uložené procedury v hlavní databázi SQL server přímo zkontroluje dbo jako vlastníka uložené procedury.

9. Osvojte si dobrý styl psaní dotazů

Je nezbytné dodržovat osvědčené postupy pro dotazy SQL, jako jsou osvědčené postupy pro styling při psaní dotazů SQL. Věnujte pozornost níže uvedeným doporučením pro zlepšení stylu psaní dotazu:

  • K dotazům SQL vždy přidávejte komentáře. Komentáře nejen pomohou ostatním členům týmu lépe porozumět vašim dotazům, ale také vám připomenou, co jste sami dělali v minulosti.
  • Používejte zřejmé konvence pojmenování. Databáze, tabulky, názvy sloupců, dočasné tabulky a další názvy proměnných by měly být 100% čitelné a jasné.
  • Pokud je to možné, dotazy odsazujte. Vnitřní dotazy musí být odsazeny o jednu kartu zleva. Názvy a typy sloupců v tabulce by měly být také odsazeny. Odsazení zajišťuje čistší vzhled a zlepšuje čitelnost dotazů, což se odráží v doporučených postupech SQL Server pro dotazy.

Závěr

SQL je velmi flexibilní jazyk, který poskytuje mnoho způsobů provádění požadovaných úloh v databázi. Chcete-li, aby byly vaše aplikace efektivnější a produktivnější a abyste se vyhnuli dlouhodobým problémům s databázemi, použijte pro psaní dotazů moderní doporučené postupy optimalizace dotazů SQL. Tyto metody vám pomohou urychlit ladění výkonu v SQL, eliminovat zbytečné rutiny a učinit veškerou vaši práci stručnější a transparentnější.

Přečtěte si také

22 šikovných příkladů indexu SQL pro zrychlení vašich dotazů


  1. Jeden bezpečnostní systém pro aplikaci, sdružování připojení a PostgreSQL – případ LDAP

  2. Aktualizace Postgresql s připojením

  3. Proč jsou vícenásobná připojení špatná pro dotaz nebo nebrání optimalizaci

  4. Ví někdo, jakou šifrovací techniku ​​používá JDeveloper/SQL Developer k zachování přihlašovacích údajů?