Optimalizace SQL dotazů

Motivace:
  • SQL jazyk je velmi flexibilní jazyk
  • Dvěma či více způsoby je možné získat stejná data
  • Rychlost různých dotazů ovšem není úplně stejná, i přesto, že vrací stejná data

Proč optimalizovat:
  • Jedná se především o minimalizaci nákladů: zdrojového času, kapacita dotazu, rychlejší odpovědi

Obecná pravidla:
  • Vyjmenovat sloupce
  • Používat co nejméně klauzuli LIKE
  • Používat co nejméně klauzuli IN, NOT IN
  • Používat klauzuli TOP, nebo LIMIT
  • Na začátek dávat obecnější podmínky
  • Výběr vhodného pořadí spojení
  • Nastavit indexy

Pravidlo 1 - Vyjmenovat sloupce

  • V SELECT dotazech nepoužívat seznam sloupců hvězdičku (*)
  • Ve většina případech nepotřebujete ve výsledku všechny sloupce

SELECT * FROM Users
Doporučuji:
SELECT UserName, Login, FullName FROM Users

Pravidlo 2 - Co nejméně LIKE
  • Nedoporučuje se používat pro vyhledání ve velkých textových polích
  • Zamyslet se, jestli není možné vyhledání provést jinou metodou

Pravidlo 3 - Co nejméně IN, NOT IN
  • Vhodnější je použít příkaz WHERE a WHERE NOT EXIST

SELECT Name, Year FROM Car WHERE Car IN ('Fiat', 'Skoda', 'Ford')
Doporučuji:
SELECT Name, Year FROM Car WHERE Typ_Car = 'Automobile'

Pravidlo 3 - Používat TOP (LIMIT)
  • V když vybíráme např. nejstaršího člověka
SELECT Year FROM People ORDER BY Alt DESC
  • Dotaz vybere všechny záznamy, které následně setřídí
Lepší řešení MS-SQL:
SELECT TOP 1 Year FROM People ORDER BY Alt DESC
Lepší řešení MY-SQL:
SELECT Year FROM People ORDER BY Alt DESC LIMIT 0,1

Pravidlo 4 - Na začátek obecnější podmínky
  • V klauzuli WHERE zadávat na začátek obecné podmínky, které vyberou nejmenší počet záznamů
SELECT Name, Year FROM People WHERE Alt > '18' AND Sex = 'Woman'
Doporučuji:
SELECT Name, Year FROM People WHERE Sex = 'Woman' AND Alt > '18'

Žádné komentáře:

Okomentovat