Databáze 2011/2012 Optimalizace, základní knstrukty T-SQL RNDr.David Hksza, Ph.D. http://siret.cz/hksza
Osnva Principy indexvání Optimalizace dtazů v MSSQL Základní knstrukty T-SQL prměnné pdmíněný tk prgramu cykly prcedury Cvičení
Index Struktura umžňující rychlejší vyhledávání na daném slupci/slupcích tabulky Urychlení dsažen takvu rganizací dat, umžňující neprhlížet všechny záznamy v tabulce (sekvenční průchd) Na index lze nahlížet jak na rejstřík v knize, neb na telefnní seznam nevýhdy větší časvé nárky na vkládání dat větší paměťvá nárčnst
B-strm Strm je speciální typ rientvanéh grafu, ve kterém neexistují cykly Orientvaný graf je datvá struktura bsahující knečnu mnžinu tzv. hran, kde hrany jsu uspřádané páry tzv. uzlů (vlná definice) Princip vyhledávacích strmvých struktur je takvý, že levý a pravý pdstrm dělí data d dvu disjunktních částí, čehž lze využít při vyhledávání pdle danéh klíče Varianty B-strmu jsu nejčastěji využívané indexvé struktury v sučasných relačních DB redundantní neredundantní
Neredundantní B-strm 1. Křen má alespň 2 ptmky, pkud není listem 2. Každý uzel krmě křene má nejméně m/2 a nejvíce m ptmků 3. Všechny větve jsu stejně dluhé 4. Každý uzel má nejméně m/2 1 a nejvíce m datvých plžek 5. Data v uzlu jsu rganizvána následvně: p, k 1, p 1, d 1,, k n, p n, d n p ukazatele na ptmky k vzestupně (sestupně) uspřádané klíče d ascivaná data k i, p i, d i datvé plžky 6. Je-li U(p i ) pdstrm uzlu p i, pak platí: k U(p i 1 ): k < k i k U(p i ): k > k i
Redundantní B-strm 5. Data jsu umístěna puze v listech, neb jsu z listů dkazvána 6. Je-li U(p i ) pdstrm uzlu p i, pak platí: k U(p i 1 ): k k i k U(p i ): k > k i
Prhledávání B-strmu 1. Cílem dtazu je k dtazvacímu klíči nalézt příslušná data, případně zjistit, že se takvý klíč ve strmě nevyskytuje. 2. Vstupíme d křene strmu. 3. Pkud se jedná neredundantní B-strm a dtaz je rven některému z klíčů, pak vrátíme příslušná data a prces uknčíme. V pačném případě vybereme interval d kteréh dtaz spadá a přesuneme se d křene pdstrmu pdle bdu 6 definice B-strmu. 4. Iterujeme pdle bdu 3. Pkud se žádný z klíčů v listvé úrvni neshduje s dtazem uknčíme prhledávání s infrmací, že příslušná data nejsu k dispzici. V pačném případě vrátíme pžadvaná data a uknčíme prces vyhledávání.
Příklad knstrukce B- strmu (m=3) credit:wikipedia
B-strmvé indexy v DBS Hdnty slupce na kterém je pstaven index, tvří klíče uzlů indexu Data jsu ulžena puze v listech, případně jsu z listvých uzlů dkazvána (redundantní B-strm) Typicky B+-strmy, ve kterých jsu data na listvé úrvni prvázána busměrným spjvým seznamem (v případě MSSQL i na vnitřní úrvni) efektivní implementace rzsahvéh dtazu nalezení hraničníh bdu intervalu a sekvenční průchd listvu úrvní Víceslupcvé indexy přadí je určen hdntu prvníh slupce, v případě shdy rzhduje druhý slupec (atd.) Klastrvaný index data jsu ulžena v přadí daném listvu úrvní indexu, Neklastrvaný index přadí plžek indexu nemá vztah k fyzickému přadí
Vytvření a smazání indexu CREATE [UNIQUE] [CLUSTERED NONCLUSTERED] INDEX ixname ON tab(slupec1[, slupec2[, ]]) DROP INDEX ixname
Pužití indexu Index se pužije/nepužije autmaticky Vytvářet indexy na čast dtazvaných slupcích Vytvářet index na cizích klíčích při DELETE nadřazenéh klíče netřeba prjít sekvenčně tabulky s FK Index nepmůže u dtazu s vysku selektivitu (velikst výsledku ve srvnání s velikstí tabulky) Index klást na slupce, kde je předpklad diverzifikvané dmény Autmaticky vytvářené klíče PRIMARY KEY UNIQUE
Plán dtazu Způsb prvádění danéh dtazu, tj. přadí prvádění perací veducí k výsledné mnžině vrácené DB serverem uživateli Dtaz je převeden d relační algebry a následně je vytvřen strm vyhdncení dtazu
Spustí plán dtazu (samtný dtaz se nespustí) Zahrne d výsledku plán dtazu Plán dtazu
T-SQL Prcedurální rzšíření SQL Micrsft SQL Server - Transact-SQL Oracle PL/SQL Pstgres PL/pgSQL Mžnsti prměnné IF WHILE prcedury Funkce kurzry vyjímky transakce
Prměnné v T-SQL Každý výskyt prměnné uvzen @ Deklarace prměnné pmcí DECLARE datvé typy jsu splečné pr prměnné a slupce tabulek DECLARE @i INT; Přiřazení hdnty pmcí SET, SELECT SET @i = 1; SELECT @i = @i + 1; Výpis d knzli lze řešit prceduru PRINT PRINT @i Živtnst prměnné je mezena aktuální dávku (příkaz GO) DECLARE @i INT; SET @i = 1; GO PRINT @i;
Pdmínky v T-SQL IF pdmínka blk ELSE blk V rámci blku může být 1 příkaz, neb více uzavřených mezi BEGIN END V pdmínce lze využívat knstruktů známých z WHERE klauzule příkazu SELECT, tj. EXISTST, NOT NULL,. IF EXISTS(SELECT * FROM t WHERE cl1 > 10) BEGIN PRINT greater than PRINT greater than END ELSE PRINT less than
Datvý slvník v MSSQL datvý slvník bsahuje metadata ke všem bjektům v DB serveru V MSSQL přístup přes 2 schémata sys bsahuje phledy s detailními infrmacemi prakticky všech bjektech v DB INFORMATION_SCHEMA infrmace vyžadvané standardem SQL-92 méně pdrbné IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME= t ) DROP TABLE t; IF EXISTS (SELECT * FROM sys.tables WHERE name = t ) DROP TABLE t; IF OBJECT_ID( t ) IS NOT NULL DROP TABLE t;
Cykly v T-SQL WHILE pdminka {blk BREAK CONTINUE} V rámci blku může být 1 příkaz, neb více uzavřených mezi BEGIN END DECLARE @i INT; SET @i = 1; WHILE @i <= 10 BEGIN PRINT @i; SET @i = @i + 1; END
Vytvření prcedury Prcedura může zapuzdřvat prakticky libvlný T-SQL kód včetně DML příkazů CREATE PROCEDURE uspprc1 (@param1 INT, @param2 VARCHAR(30)) AS BEGIN tel_prcedury END Návratvé hdnty OUT parametry RETURN funguje puze pr datvý typ INTEGER CREATE PROCEDURE uspprc2 (@param1 INT, @param2 VARCHAR(30) OUTPUT) AS BEGIN PRINT @param2; SET @param2 = @param1; RETURN @param1 + 1; END
Vlání prcedury Prcedura je vlána pmcí příkazu EXECUTE Parametry jsu dděleny d jména prcedury mezeru a vzájemně čárku EXEC uspprc1 10, 'test' DECLARE @rv INT; DECLARE @param VARCHAR(30) = 'test'; EXEC @rv = uspprc2 5, @param OUT PRINT @rv PRINT @param