Optimalizace SQL dotazů Michal Kopecký

Slides:



Advertisements
Podobné prezentace
Aplikační a programové vybavení
Advertisements

Základy jazyka SQL Jan Tichava
Zpracování SQL Lubomír Andrle 5. přednáška
A5M33IZS – Informační a znalostní systémy Dotazovací jazyk SQL - I.
Aplikační a programové vybavení
Jazyk SQL Ing. Zdena DOBEŠOVÁ. SQL Structured Query Language 1974 SEQUEL (Structured English Query Language) neprocedurální relační dotazovací jazyk norma.
DB1 – 9. cvičení Optimalizace dotazu Konkurenční přístup a deadlock Indexace Transakce.
YDASYS1 Ing. Monika Šimková.
Fakulta elektrotechniky a informatiky
Další dotazy SQL Structured Query Language. Některé SQL příkazy mohou mít v sobě obsaženy další kompletní příkazy SELECT. Využijeme je tam, kde potřebujeme.
SQL Structured Query Language
Informatika pro ekonomy II přednáška 11
Fakulta elektrotechniky a informatiky
Architektury a techniky DS Tvorba efektivních příkazů I Přednáška č. 3 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy 1 Cvičení č. 4 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy 1 Cvičení č. 2 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy I Přednáška č. 5 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy 1 Cvičení č. 3 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
SQL Lukáš Masopust Historie  Předchůdcem databází byly papírové kartotéky  děrný štítek  1959 konference  1960 – vytvořen jazyk COBOL.
SQL Lukáš Masopust Historie  Předchůdcem databází byly papírové kartotéky  děrný štítek  1959 konference  1960 – vytvořen jazyk COBOL.
1IT Relační datový model
Databáze Jiří Kalousek.
MySQL - Vytvoření nové tabulky  create table jméno_tabulky (jméno_položky typ_položky,... ) Přehled nejběžnějších datových typů Přehled nejběžnějších.
Databázové systémy Štěpán Šípal.
Databázové systémy II Přednáška č. 8 – Pohledy (Views)
Execution plans Lubomír Andrle 6. přednáška
Školení správců II. Petr Pinkas RNDr. Vít Ochozka.
Optimalizace SQL dotazů
Relační databáze.
Konceptuální návrh databáze
Vypracoval: Ondřej Dvorský Třída: VIII.A
KIV/ZIS cvičení 6 Tomáš Potužák. Pokračování SQL Klauzule GROUP BY a dotazy nad více tabulkami Stáhnout soubor studenti_dotazy_sql.mdb.
Informatika pro ekonomy II přednáška 10
Databázové systémy I Cvičení č. 6 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
Databázové systémy Přednáška č. 6.
SQL – základní pojmy Ing. Roman Danel, Ph.D.
SQL PVA Jan Hora. SQL „graficky“ Grafický vs. pravý SQL SELECT ORDED BY WHERE.
Databázové systémy II Přednáška č. X Ing. Tomáš Váňa, Ing. Jiří Zechmeister Fakulta elektrotechniky a informatiky
Číslo šablony: III/2 VY_32_INOVACE_P4_3.8 Tematická oblast: Aplikační software pro práci s informacemi II. Databáze – základy SQL Typ: DUM - kombinovaný.
Databázové systémy II Přednáška č. 9. Transakce je logická jednotka práce sestávající z jednoho nebo více SQL příkazů, které jsou atomické z hlediska.
Konceptuální návrh databáze
Informatika II PAA DOTAZOVACÍ JAZYKY
Aplikační a programové vybavení
Databáze velké množství dat pevně dané struktury
Obchodní akademie, Ostrava-Poruba, příspěvková organizace Vzdělávací materiál/DUM VY_32_INOVACE_01B13 Autor Ing. Jiří Kalousek Období vytvoření březen.
Základní obeznámení s jazykem SQL Databázové systémy.
KIV/ZIS cvičení 4 Tomáš Potužák. Dotazy - úvod Umožňují pracovat s databází –Získávat specifické informace z tabulky, případně z více tabulek najednou.
Databázové systémy SQL Výběr dat.
Progress SQL92 Optimalizátor Jan Lánský
Databázové Aplikace Slidy ke cvičení DBI026, část 3 KSI MFF UK Verze
Databázové systémy Přednáška č. 5 Datové typy a Fyzická organizace dat.
DBXplorer Systém pro vyhledávání nad relačními databází podle klíčových slov. zpracovala Margarita Vishnyakova.
Administrace Oracle Paralelní zpracování.
Lišta nástrojů Standard otevření, uložení a další manipulace se soubory (tj. projekty) načítání dat (mapových vrstev) „žluté plus“ odkaz na další lišty.
Databázové Aplikace Slidy ke cvičení DBI026, část 2 KSI MFF UK Verze
Perzistence XML dat Kamil Toman
Úvod do databází zkrácená verze.
Databáze ● úložiště dat s definovaným přístupem ● typy struktury – strom, sekvence, tabulka ● sestává z uspořádaných záznamů ● databáze – struktura – záznam.
Databáze MS ACCESS 2010.
Databázové systémy přednáška 6 – Indexy
SQL – příkaz SELECT Ing. Roman Danel, Ph.D.
Dotazovací jazyk SQL I.
Databázové systémy a SQL
Informatika pro ekonomy přednáška 8
[ START WITH podmínka ] CONNECT BY podmínka
Optimalizace SQL dotazů
Přednáška 9 Triggery.
Transkript prezentace:

Optimalizace SQL dotazů Michal Kopecký Výběr ze slajdů k 2. přednášce předmětu Databázové Aplikace (DBI026) na MFF UK Indexy Plány provedení dotazu Ovlivnění optimalizátoru

Optimalizace SQL dotazů Indexy Plány provedení dotazu Ovlivnění optimalizátoru

DBI026 -DB Aplikace - MFF UK Indexy Slouží pro zrychlení přístupu k datům na základě podmínky ve WHERE klauzuli Nemění syntaxi ani sémantiku příkazů pro manipulaci s daty Unikátní vs. neunikátní Jednosloupcové vs. vícesloupcové B-stromy vs. bitmapy Nad sloupci vs. nad výrazy Doménové indexy (fulltextové, prostorové, …) DBI026 -DB Aplikace - MFF UK

DBI026 -DB Aplikace - MFF UK Indexy Tvorba indexů není v SQL-92 standardizována Jednotlivé databázové systémy řeší tvorbu indexů svými prostředky, které jsou navzájem více či méně podobné Může se lišit syntaxe podpora různých typů indexů jejich (ne)použití pro daný dotaz a obsah tabulky DBI026 -DB Aplikace - MFF UK

DBI026 -DB Aplikace - MFF UK B-tree indexy Obvykle redundantní B+ stromy Hodnoty v listech Listy oboustranně linkované pro snadný sekvenční průchod. Vhodné pro sloupce s vysokou selektivitou (počtem různých hodnot ve sloupci). Vícesloupcové (složené) indexy mohou zvýšit selektivitu. Použitelné, pokud dotaz omezuje hodnoty prvních k sloupců indexu, přičemž prvních k-1 sloupců musí být omezeno na rovnost Nepoužitelné, pokud v dotazu není omezení na první sloupec indexu Nad jednou tabulkou v jednom dotazu nelze obvykle kombinovat více B-tree indexů. Dotaz se vyhodnocuje s použitím jednoho z indexů a ostatní podmínky se dopočítávají DBI026 -DB Aplikace - MFF UK

DBI026 -DB Aplikace - MFF UK Bitmapové indexy Pro každou hodnotu sloupce / výrazu vytvořen binární řetězec obsahující 1 právě pro řádky s danou hodnotou Vhodné pro sloupce s nízkou selektivitou Lze kombinovat více bitmapových indexů nad jednou tabulkou pro zvýšení selektivity Kombinací více bitmap se zvyšuje selektivita indexu SELECT * FROM Obyvatel WHERE Pohlaví=’M’ AND (Kraj=’Pha’ OR Kraj=’SČ’); Kombinace tří bitmapových řetězců 1 M P h a S Č ( )=  DBI026 -DB Aplikace - MFF UK

Kdy indexy (ne)pomohou Pokud je procento vyhovujících záznamů velké zvýšená režie s přístupem k řádkům v nesekvenčním pořadí, daném indexem Při dotazech na hodnotu NULL v indexech se běžně neukládají Pomohou V dotazech na rovnost sloupce s konstantou V dotazech na náležení hodnoty do intervalu DBI026 -DB Aplikace - MFF UK

Kdy (ne)vytvářet indexy Jak Oracle, tak MS SQL vytváří automaticky unikátní indexy pro primární klíče jméno bývá shodné se jménem omezení kandidátní klíče (UNIQUE sloupce) DBI026 -DB Aplikace - MFF UK

Kdy (ne)vytvářet indexy Důležité je vytvářet indexy pro cizí klíče !!! Zrychlení odezvy při manipulaci s nadřízenou tabulkou Při rušení nadřízené řádky je bez indexu nutné projít celou podřízenou tabulku, zda neobsahuje závislé řádky Pokud je aktivované kaskádové mazání a odkazy jsou víceúrovňové, pro každou nalezenou podřízenou řádku je nutné projít celou její pořízenou tabulku atd. atd. Průchod tabulkou čte i bloky, obsahující zrušené záznamy v tabulce Průchod přes index najde efektivně všechny existující závislé řádky bez nutnosti čtení samotné tabulky Např. Oracle řeší nemožnost efektivně najít a zamknout podřízené řádky zamknutím celé podřízené tabulky, čímž velmi omezuje možnost běhu aplikace s více uživateli. DBI026 -DB Aplikace - MFF UK

Kdy (ne)vytvářet indexy Indexy by se jinak měly vytvářet jen v případě, pokud výrazně pomohou často kladeným dotazům V opačném případě spíše zdržují aktualizační operace DBI026 -DB Aplikace - MFF UK

DBI026 -DB Aplikace - MFF UK Indexy Indexy nad sloupci CREATE [UNIQUE] INDEX jméno_indexu ON jméno_tabulky(sloupec1, sloupec2, …); Př. CREATE INDEX Osoba_Pr_Jm_Inx ON Osoba(Prijmeni,Jmeno); Index lze použít v příkazu, omezujícím první použitý sloupec SELECT * From Osoba WHERE Prijmeni=’Svoboda’; DBI026 -DB Aplikace - MFF UK

DBI026 -DB Aplikace - MFF UK Indexy Indexy nad sloupci CREATE [UNIQUE] INDEX jméno_indexu ON jméno_tabulky(sloupec1, sloupec2, …); Př. CREATE INDEX Osoba_Pr_Jm_Inx ON Osoba(Prijmeni,Jmeno); Index nelze použít v příkazu, omezujícím jen druhý použitý sloupec SELECT * From Osoba WHERE Jmeno=’Zdeněk’; DBI026 -DB Aplikace - MFF UK

DBI026 -DB Aplikace - MFF UK Unikátní indexy Vhodnější je definovat unikátnost pomocí integritních omezení PRIMARY KEY a UNIQUE Kromě unikátních indexů jsou tak definována i samotná omezení DBI026 -DB Aplikace - MFF UK

DBI026 -DB Aplikace - MFF UK Indexy Indexy s definicí třídění CREATE [UNIQUE] INDEX jméno_indexu ON jméno_tabulky(sloupec1 [{ASC|DESC}], …); Definují směr třídění v jednotlivých sloupcích Mohou pomoci určit výsledné pořadí záznamů bez provádění třídících operací během SELECT příkazu Př. CREATE INDEX Zamestnanec_Zarazeni_Plat_Inx ON Zamestnanec(Zarazeni, Plat DESC); DBI026 -DB Aplikace - MFF UK

DBI026 -DB Aplikace - MFF UK Bitmapové indexy Bitmapové indexy (jsou vždy neunikátní) CREATE BITMAP INDEX jméno_indexu ON jméno_tabulky({sloupec1|výraz1}, …); Př. CREATE BITMAP INDEX Vyuka_Den_Inx ON Vyuka(DenVTydnu); DBI026 -DB Aplikace - MFF UK

DBI026 -DB Aplikace - MFF UK Indexy Zrušení indexu DROP INDEX jméno_indexu; DBI026 -DB Aplikace - MFF UK

Na co si dát při návrhu pozor Používat správné typy indexů Negenerovat bez uvážení indexy pro všechny sloupce tabulky a jejich kombinace Zdržují se aktualizace dat Zvyšuje se nárok na diskový prostor DBI026 -DB Aplikace - MFF UK

Na co si dát při návrhu pozor Při návrhu dotazů využívat prostředky daného serveru pro zjištění té nejlepší varianty dotazu ovlivnění způsobu vyhodnocení dotazu Optimalizátory databází mají své meze pro nalezení optimálního plánu se používají heuristické postupy Neuvažují se zdaleka všechny kombinace pořadí tabulek a indexů DBI026 -DB Aplikace - MFF UK

DBI026 -DB Aplikace - MFF UK Optimalizace dotazů Jeden dotaz lze napsat více způsoby Shodná sémantika Rozdílný způsob výpočtu výsledku Doba výpočtu se může lišit i řádově !! O způsobu výpočtu rozhoduje optimalizátor uvnitř databázového serveru Potřebné je Umět zjistit, jakým způsobem výpočet proběhne Zvolit nejlépe optimalizovatelný zápis dotazu nebo optimalizátoru pomoci s výběrem DBI026 -DB Aplikace - MFF UK

Co obsahuje plán provedení Strom elementárních operací Vyhodnocuje se post-order metodou, operace v kořeni získá celý požadovaný výsledek Nástin obsahu plánu V listech přístupy ke zdrojům Index UNIQUE SCAN Index RANGE SCAN Table FULL SCAN Ve vnitřních uzlech Přístupy k řádku tabulky podle indexu Spojení tabulek (vnořené cykly, MERGE JOIN, HASH JOIN) Třídící operace Filtry dle dodatečných podmínek DBI026 -DB Aplikace - MFF UK

DBI026 -DB Aplikace - MFF UK Typy optimalizace V Oracle Starší RULE BASED optimalizace (RBO) Odvozuje plán ze syntaxe příkazu a existence indexů Novější COST BASED optimalizace (CBO) Oracle 8+, doporučována pro lepší vlastnosti Založena na statistikách, počítá cenu zdrojů provedení operace (čas, prostor, třídící operace, …) Dokáže rozlišit plány i pro různé hodnoty konstant v dotazu DBI026 -DB Aplikace - MFF UK

Rule-Based Optimalizace dotazů Cena přístupu k podmnožině řádek v tabulce v klesajícím pořadí Full-scan Prochází se celá tabulka, u každé řádky se ověří podmínka Může být vhodné, pokud procento vyhovujících řádek je dost velké Index-Range-Scan Vyhledání intervalu v indexu, ověření ostatních podmínek v odkazovaných řádcích Unique-Index-Scan Vyhledání jediné možné vyhovující řádky podle unikátního indexu ROWID-Scan Vyhledání řádky na základě známé hodnoty jejího fyzického identifikátoru v databázi DBI026 -DB Aplikace - MFF UK

DBI026 -DB Aplikace - MFF UK Optimalizace dotazů Cena operace JOIN dvou tabulek Databáze se snaží zvolit tabulku s dražším přístupem jako hlavní tabulku Ke každé nalezené vyhovující řádce dohledává odpovídající řádky ve druhé tabulce Pokud obě tabulky nabízí pouze Full-Scan, data obou se setřídí a provede se Merge-Join DBI026 -DB Aplikace - MFF UK

DBI026 -DB Aplikace - MFF UK Optimalizace dotazů Jak zjistit způsob provedení příkazu? Konzola ISQL nabízí možnost zobrazit textově plán provedení příkazu sekvencí příkazů set showplan_text on go <příkaz> go DBI026 -DB Aplikace - MFF UK

DBI026 -DB Aplikace - MFF UK Query Analyzer Grafická reprezentace plánu provedení Vložení příkazu Stisk CTRL+L DBI026 -DB Aplikace - MFF UK

Jak psát optimalizovatelné dotazy V aplikacích používat místo konstant tzv. placeholdery a aplikační proměnné Dva různé dotazy mají dva samostatné plány provedení. Jejich vytvoření zabírá čas a jiné zdroje databáze SELECT * FROM Emp WHERE DeptNo=10; SELECT * FROM Emp WHERE DeptNo=20; SELECT * FROM Emp WHERE DeptNo=:d; Někdy ovšem mohou dva plány pomoci, pokud se princip provedení odůvodněně liší. SELECT * FROM Vojaci WHERE Pohlavi=’M’ SELECT * FROM Vojaci WHERE Pohlavi=’Ž’ 90% dat (full s.) 10% dat (range s.) DBI026 -DB Aplikace - MFF UK

Jak psát optimalizovatelné dotazy Jeden dotaz psát všude přesně stejně Různé zápisy databáze vždy znovu analyzuje a vymýšlí plán provedení SELECT * FROM Emp WHERE Ename LIKE ’A%’ AND DeptNo=10; SELECT * FROM Emp WHERE DeptNo=10 AND Ename LIKE ’A%’; DBI026 -DB Aplikace - MFF UK

Nevýhody rule-based optimalizace Pokud existuje více neunikátních indexů na jedné tabulce, nemusí optimalizátor vybrat ten nejlepší SELECT * FROM Osoba WHERE Jmeno=’Jan’ AND Mesto=’Praha’; Buďto se přes index hledají Janové, a ověřuje se bydliště, nebo se hledají Pražáci a ověřuje se jméno DBI026 -DB Aplikace - MFF UK

Nevýhody rule-based optimalizace Použití určitého indexu je možné optimalizátoru znemožnit použitím výrazu v dotazu SELECT * FROM Osoba WHERE CONCAT(Jmeno,’’)=’Jan’ AND Mesto=’Praha’; Index přes jméno nelze použít, použije se tedy index přes město DBI026 -DB Aplikace - MFF UK

Cost-based optimalizace Pro jednotlivé plány se počítá cena provedení v řadě hledisek Množství I/O operací, řádek, Byte, … Cena prováděných třídících operací Cena za HASH operace Vybírá se plán s nejnižší váženou cenou DBI026 -DB Aplikace - MFF UK

Cost-based optimalizace Využívá statistických informací o datech Počet různých hodnot ve sloupci, Histogramy rozložení hodnot ve sloupci, Počet řádek v tabulce, Průměrná délka jedné řádky Pro konkrétní hodnotu nebo interval hodnot lze odhadnout procento vyhovujících řádek v tabulce jejich datový objem DBI026 -DB Aplikace - MFF UK

DBI026 -DB Aplikace - MFF UK Tvorba statistik Standardně povolen přepínač AUTO_CREATE_STATISTICS Statistiky se generují automaticky ALTER DATABASE dbname SET AUTO_CREATE_STATISTICS {ON|OFF} Ručně pomocí sp_createstats Př. vytvoření dodatečné statistiky pro dvousloupcovou hodnotu na základě vzorku dat CREATE STATISTICS FirstLast ON Person.Contact(FirstName,LastName) WITH SAMPLE 50 PERCENT DBI026 -DB Aplikace - MFF UK

Co statistiky obsahují Tabulky Počet řádek Počet datových bloků na řádku … Sloupce Počet různých hodnot Počet NULL hodnot Histogramy hodnot (kolik hodnot připadne do daného intervalu) DBI026 -DB Aplikace - MFF UK