Optimalizace SQL dotazů

Podobné dokumenty
Roman Dušek

Databázové systémy Cvičení 5.2

Databázové systémy. Cvičení 6: SQL

Relační DB struktury sloužící k optimalizaci dotazů - indexy, clustery, indexem organizované tabulky

Optimalizace dotazů a databázové transakce v Oracle

Primární klíč (Primary Key - PK) Je právě jedna množina atributů patřící jednomu z kandidátů primárního klíče.

Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal

Databáze I. Přednáška 4

8. Zpracování dotazu. J. Zendulka: Databázové systémy 8 Zpracování dotazu 1

IDS optimalizátor. Ing. Jan Musil, IBM ČR Community of Practice for

Databáze I. 5. přednáška. Helena Palovská

Fyzické uložení dat a indexy

Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc.

J. Zendulka: Databázové systémy 8 Zpracování dotazu Podstata optimalizace zpracování dotazu

Architektury databázových

KIV/ZIS cvičení 5. Tomáš Potužák

Návrh a tvorba WWW stránek 1/14. PHP a databáze

Operátory ROLLUP a CUBE

B0M33BDT Technologie pro velká data. Supercvičení SQL, Python, Linux

Databázové systémy I

INDEXY JSOU GRUNT. Pavel Stěhule

37. Indexování a optimalizace dotazů v relačních databázích, datové struktury, jejich výhody a nevýhody

12. blok Pokročilé konstrukce SQL dotazů - část II

B Organizace databáze na fyzické úrovni u serveru Oracle

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE

Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Jihlava

Jaký je rozdíl v definicicíh VARCHAR2(20 BYTE) a VARCHAR2(20 CHAR):

8.2 Používání a tvorba databází

Střední odborná škola stavební Karlovy Vary Sabinovo náměstí 16, Karlovy Vary Autor: Ing. Hana Šmídová Název materiálu:

Informační systémy 2008/2009. Radim Farana. Obsah. Jazyk SQL

Jazyk SQL databáze SQLite. připravil ing. petr polách

7. Integrita a bezpečnost dat v DBS

7. Integrita a bezpečnost dat v DBS

Databázové systémy. Datová integrita + základy relační algebry. 4.přednáška

Obsah. Kapitola 1. Kapitola 2. Kapitola 3. Kapitola 4. Úvod 11. Stručný úvod do relačních databází 13. Platforma 10g 23

Inovace a zkvalitnění výuky prostřednictvím ICT. Základní seznámení s MySQL Ing. Kotásek Jaroslav

KIV/ZIS cvičení 6. Tomáš Potužák

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Úvod do databázových systémů

6. Fyzická (interní) úroveň databázového systému

DJ2 rekurze v SQL. slajdy k přednášce NDBI001. Jaroslav Pokorný

6. blok část B Vnořené dotazy

Úvod do databázových systémů

1. Databázové systémy (MP leden 2010)

4. blok část A Logické operátory

Úvod do databázových systémů

Využití XML v DB aplikacích

Databáze SQL SELECT. David Hoksza

Oracle XML DB. Tomáš Nykodým

Databáze. Velmi stručný a zjednodušený úvod do problematiky databází pro programátory v Pythonu. Bedřich Košata

Materializované pohledy

DUM 12 téma: Příkazy pro tvorbu databáze

Kritéria hodnocení praktické maturitní zkoušky z databázových systémů

6. Fyzická (interní) úroveň databázového systému

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Úvod do MS Access. Modelování v řízení. Ing. Petr Kalčev

Sada 1 - PHP. 14. Úvod do jazyka SQL

Úvod do databází. Modelování v řízení. Ing. Petr Kalčev

TimescaleDB. Pavel Stěhule 2018

Databázové systémy. Doc.Ing.Miloš Koch,CSc.

Databázové systémy Cvičení 5.3

Inovace a zkvalitnění výuky prostřednictvím ICT Databázové systémy MySQL základní pojmy, motivace Ing. Kotásek Jaroslav

PG 9.5 novinky ve vývoji aplikací

Kapitola 11: Indexování a hešování. Základní představa

RELAČNÍ DATABÁZOVÉ SYSTÉMY

Michal Krátký. Tvorba informačních systémů, 2008/2009. Katedra informatiky VŠB Technická univerzita Ostrava. Tvorba informačních systémů

Virtuální privátní databáze

Tvorba informačních systémů

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 10.4.

SQL v14. 4D Developer konference. 4D Developer conference 2015 Prague, CZ Celebrating 30 years

Distanční opora předmětu: Databázové systémy Tématický blok č. 7: Fulltextové vyhledávání Autor: RNDr. Jan Lánský, Ph.D.

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

RNDr. Michal Kopecký, Ph.D. Department of Software Engineering, Faculty of Mathematics and Physics, Charles University in Prague

Informační systémy ve zdravotnictví. 6. cvičení

Úvod do databázových systémů

Základy informatiky. 08 Databázové systémy. Daniela Szturcová

Multi-dimensional expressions

Databáze 2011/2012 SQL DDL (CREATE/ALTER/DROP TABLE), DML (INSERT/UPDATE/DELETE) RNDr.David Hoksza, Ph.D.

O Apache Derby detailněji. Hynek Mlnařík

Modely datové. Další úrovní je logická úroveň Databázové modely Relační, Síťový, Hierarchický. Na fyzické úrovni se jedná o množinu souborů.

1 Webový server, instalace PHP a MySQL 13

5. POČÍTAČOVÉ CVIČENÍ

Databázový systém označuje soubor programových prostředků, které umožňují přístup k datům uloženým v databázi.

Jazyk SQL 1. Michal Valenta. Katedra softwarového inženýrství FIT České vysoké učení technické v Praze c Michal Valenta, 2012 BI-DBS, ZS 2011/12

KIV/ZIS - SELECT, opakování

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Instalace. Produkt je odzkoušen pro MS SQL server 2008 a Windows XP a Windows 7. Pro jiné verze SQL server a Windows nebyl testován.

InnoDB transakce, cizí klíče, neumí fulltext (a nebo už ano?) CSV v textovém souboru ve formátu hodnot oddělených čárkou

Text úlohy. Systémový katalog (DICTIONARY):

Paralelní dotazy v PostgreSQL 9.6 (a 10.0)

Popis ovládání. Po přihlášení do aplikace se objeví navigátor. Navigátor je stromově seřazen a slouží pro přístup ke všem oknům celé aplikace.

Složitosti základních operací B + stromu

Programování a implementace Microsoft SQL Server 2014 databází

Integritní omezení (IO)

Ukládání a vyhledávání XML dat

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.

RELAČNÍ DATABÁZE ACCESS

Replikace je proces kopírování a udržování databázových objektů, které tvoří distribuovaný databázový systém. Změny aplikované na jednu část jsou

SQL SQL-SELECT. Informační a znalostní systémy. Informační a znalostní systémy SQL- SELECT

Transkript:

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

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

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é, ) 3

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 4

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í 5

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ů M 1 1 1 1 1 P h a 1 1 1 S Č ( )= 1 1 1 6 1 1 1

Kdy indexy (ne)pomohou Nepomohou 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 7

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) jméno bývá shodné se jménem omezení 8

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. 9

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 1

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 ; 11

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 ; 12

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í 13

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); 14

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); 15

Indexy Zrušení indexu DROP INDEX jméno_indexu; 16

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 17

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ů 18

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 19

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 2

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 21

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 22

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 23

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 24

Query Analyzer Grafická reprezentace plánu provedení Vložení příkazu Stisk CTRL+L 25

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=1; SELECT * FROM Emp WHERE DeptNo=2; 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= Ž 9% dat (full s.) 1% dat (range s.) 26

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=1; SELECT * FROM Emp WHERE DeptNo=1 AND Ename LIKE A% ; 27

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 28

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 29

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 3

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 31

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 5 PERCENT 32

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) 33