Markus Winand: SQL Performance Explained

Pavel Stěhule 8. 7. 2013

Při svých školeních vidím, že se překvapivě hodně vývojářů nedokáže jednoduše vymanit z limitů, které jsou vlastní technologii, kterou při své běžné práci denně používají. Jsou příliš zafixovaní na jednu technologii, což jim pak překáží efektivně řešit případné výkonnostní problémy moderních databází.

Všeobecně chybí základní znalosti datových struktur – co je to hash, strom, pole a jaké jsou jejich vlastnosti a vhodné nasazení. Chybí znalosti a schopnosti psaní si vlastních specializovaných serverů – což má důsledek v neefektivním využití paměti a CPU. Úplně by postačila schopnost vývoje primitivních serverů typu memcache. Chybí schopnost správně vybrat technologie vůči předpokládanému charakteru provozu a objemu zpracovaných dat.

Pro běžnou praxi není nutné mít akademické vzdělání a rozumět úplně všemu (nehledě na to, že takový tu snad nikdo ani není). Určitě je ale vhodné mít základy pro každou používanou technologii a vědět něco i o věcech, které se zrovna ve firmě nepoužívají. Relační databáze jsou jednou z nejčastěji chybně používaných technologií. Jsou relativně user friendly (ostatně za tímto účelem bylo SQL navrženo), a tak s databázemi může velice rychle dělat každý bez proškolení. To ale může svádět k mylným domněnkám a nepříjemným překvapením. To když dojde na lámání chleba a databáze se nepříjemně zvětší. Pak už ty znalosti nutné jsou. Alespoň základní, nebo ještě lépe minimální nezbytné. Ke studiu nejsou nutné drahé kurzy, stačí kvalitní literatura. A zrovna jednu knihu si dovolím doporučit, jelikož v čitelném rozsahu (zhruba 200 stran) přináší základní přehled znalostí nezbytných pro efektivní práci s databázemi.

S jejím autorem Markusem Winandem jsem se potkal na letošním P2D2 a měl jsem čas se s ním bavit o jeho práci. Zjistili jsme, že máme úplně stejné zkušenosti – velká část problémů s výkonem je relativně jednoduše řešitelná a jejich příčinnou jsou chybějící základní znalosti (částečně teorie, částečně řemesla) a mylné předpoklady (např předpoklad, že se Oracle bude chovat stejně jako MSSQL Server). Markusova kniha se mi líbí i proto, že přehledně popisuje základy rovnou pro čtyři databazové systémy: MySQL, Oracle, PostgreSQL a MSSQL Server (řazeno abecedně). A to aniž by některé databázi nadržoval (i když hodně prostoru dostává Oracle – díky některým svým hodně specifickým a zvláštním funkcím). To mi přijde hodně dobré a praktické – mezi těmito databázemi jsou velké rozdíly (i když je spojuje SQL) a je důležité to akceptovat (a vědět (tušit) v čem, kde, a kdy může být problém).

První kapitola se jmenuje Anatomie indexů. Všichni programátoři vědí, že indexy urychlují provádění dotazů. Ale už ne každý programátor ví, jak indexy fungují a co reálně dělají. Druhá a patrně nejdelší kapitola je zaměřená na klauzuli WHERE příkazu SELECT. Autor zde vysvětluje, proč některé (a programátory oblíbené) způsoby zápisu podmínky efektivně blokují použití indexů a jsou důvodem, proč je dotyčný dotaz pomalý. Hezký příklad je ze strany 66:

-- a. špatně
SELECT ...
   FROM sales
  WHERE to_char(sale_date, 'YYYY-MM-DD') = '1970-01-01'

--b. dobře
SELECT
   FROM sales
  WHERE sale_date = to_date('1970-01-01', 'YYYY-MM-DD');

Tento příklad je hodně názorný – neproškoleného vývojáře to netrkne, ale zkušenějšímu nebo proškolenému vývojáři by při pohledu na příklad (a) měla naskakovat husí kůže.

Krátká třetí kapitola je věnovaná otázkám výkonu a škálování a je spíš seznámením s všeobecně používanou terminologií. Čtvrtá kapitola se věnuje spojování relací – joinům. Jsou zde vysvětleny nejčastější implementace spojení relací – nested loop, hash join a merge join. Pátá kapitola je věnovaná speciálním formátům dat a technikám umožňujícím rychlejší přístup k datům – index only scan, index organized tables atd. V další kapitole se čtenář seznámí s implementací řazení a agregace. V sedmé kapitole se autor věnuje tzv. TOP n dotazům a stránkování výsledků (S přednáškou věnovanou nevhodnému používání klauzulí LIMIT a OFFSET vystoupil na letošním P2D2). Poslední kratší kapitola je věnovaná modifikacím dat – příkazům INSERT, UPDATE a DELETE. V příloze pak čtenář najde stručný návod, jak číst prováděcí plány v knize zmíněných databází.

widgety

Na Markusovi se mi líbí, že je přímočarý. Recenzovaná kniha neobsahuje žádnou vatu – a že je útlá, tak by mohla být i naděje, že si přečtou ti, kterým je určena – vývojáři, kteří používají SQL relační databáze, které jsou, zatím, pro ně černou skříňkou. Má to smysl, protože je relativně obtížné dostat z databází maximum, ale je poměrně snadné (stačí neházet databázi klacky pod nohy a programovat s trochou fištrónu) dostat z databáze dost na to, aby byli uživatelé spokojeni.

Informace o knize

Název: SQL Performance Explained
Autor: Markus Winand
Jazyk: angličtina
Počet stran: 204
Vydavatel: Markus Winand
Rok vydání: 2012
Vazba: brožovaná
ISBN: 978–3–9503078–2–5

Našli jste v článku chybu?
Vitalia.cz: 5 důvodů, proč jet na výlov rybníka

5 důvodů, proč jet na výlov rybníka

Vitalia.cz: Tradiční čínská medicína a rakovina

Tradiční čínská medicína a rakovina

Měšec.cz: TEST: Vyzkoušeli jsme pražské taxikáře

TEST: Vyzkoušeli jsme pražské taxikáře

DigiZone.cz: Jaká je Swisscom TV Air Free

Jaká je Swisscom TV Air Free

Lupa.cz: Co všechno je Facebook schopný cenzurovat?

Co všechno je Facebook schopný cenzurovat?

Lupa.cz: Jak se prodává firma za miliardu?

Jak se prodává firma za miliardu?

Vitalia.cz: Tesco nabízí desítky tun jídla zdarma

Tesco nabízí desítky tun jídla zdarma

Lupa.cz: Odkazy na pirátský obsah mohou být nelegální

Odkazy na pirátský obsah mohou být nelegální

Lupa.cz: Patička e-mailu závazná jako vlastnoruční podpis?

Patička e-mailu závazná jako vlastnoruční podpis?

DigiZone.cz: Sat novinky: NASA Ultra HD (4K)

Sat novinky: NASA Ultra HD (4K)

Lupa.cz: Další Češi si nechali vložit do těla čip

Další Češi si nechali vložit do těla čip

Lupa.cz: Adblock Plus začal prodávat reklamy

Adblock Plus začal prodávat reklamy

Vitalia.cz: Vodárny varují: Ve vodě z kohoutku jsou bakterie

Vodárny varují: Ve vodě z kohoutku jsou bakterie

DigiZone.cz: Technisat připravuje trojici DAB

Technisat připravuje trojici DAB

Vitalia.cz: Test dětských svačinek: Tyhle ne!

Test dětských svačinek: Tyhle ne!

Lupa.cz: Blíží se konec Wi-Fi sítí bez hesla?

Blíží se konec Wi-Fi sítí bez hesla?

Podnikatel.cz: Letáky? Lidi zuří, ale ony stále fungují

Letáky? Lidi zuří, ale ony stále fungují

Vitalia.cz: Nová vakcína proti chřipce se aplikuje nosem

Nová vakcína proti chřipce se aplikuje nosem

DigiZone.cz: Regionální tele­vize CZ vysílá "Mapu úspěchu"

Regionální tele­vize CZ vysílá "Mapu úspěchu"

Podnikatel.cz: Udělali jsme velkou chybu, napsal Čupr

Udělali jsme velkou chybu, napsal Čupr