Optimalizace dotazů Firebird
Optimalizace dotazů Firebird se zabývá tím, jak probíhají příkazy SELECT: plány, statistiky, přístupové metody, vzory ladění a jak zachytit pomalé dotazy pomocí MON$ a Trace API.
Osnova
-
Výkon dotazů SELECT - jak je dotaz prováděn
- Přístup klient-server
- Příprava, generování plánu, provádění, načítání, bufferování
-
Statistiky provádění
- Čtení, zápisy, načítání, čas
- Databázová cache, disk, CPU
- Jak garbage ovlivňuje provádění
- Cache hits (Classic vs SuperServer)
-
Přístupové metody / datové cesty
- NATURAL scan
- INDEX search: B-stromy, ukazatele na záznamy, směr, příklady
- Vynucené použití indexu, bitový merge indexů
- Kardinalita tabulky a selektivita indexu
- Vypnutí indexů v WHERE
- Index ORDER vs SORT (nastavení
firebird.conf) - Vypnutí indexů v ORDER BY / GROUP BY
- Plány v uložených procedurách a pohledech
-
Ladění dotazů
- Jak číst PLAN
- Úpravy optimalizátoru
WHERE FIELD IN (…)- LIKE, CONTAINING, STARTING WITH
- JOIN: implicitní vs explicitní, špatné joiny, LEFT/RIGHT, self-joiny
- UPDATE + SELECT
- MAX, MIN, COUNT, AVG, SUM
- IN vs EXISTS vs MERGE
WHERE (X AND Y) OR (K AND N)
-
Sledování pomalých dotazů pomocí MON$ a Trace API
- Co jsou MON$ a Trace
- Důležité pole MON$
- Parametry a výstup Trace API
- Nástroje (včetně monitorování HQbird)