Fakulta elektrotechniky a informatiky

Slides:



Advertisements
Podobné prezentace
Zpracování informací a znalostí Datové struktury a algoritmy pro vyhledávání informací Doc. RNDr. Jan Rauch, CSc. Katedra informačního a znalostního.
Advertisements

Databázové systémy 2 Cvičení č. 8
Vlastní skript může být umístěn: v hlavičce stránky v těle stránky
 Informací se data a vztahy mezi nimi stávají vhodnou interpretací pro uživatele, která odhaluje uspořádání, vztahy, tendence a trendy  Existuje celá.
DB1 – 9. cvičení Optimalizace dotazu Konkurenční přístup a deadlock Indexace Transakce.
YDASYS1 Ing. Monika Šimková.
Fakulta elektrotechniky a informatiky
Aplikace teorie grafů Základní pojmy teorie grafů
SQL – tříhodnotová logika
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.
Informatika pro ekonomy II přednáška 11
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 II Přednáška č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy 1 Cvičení č. 3 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Temporální databáze a TSQL
ADT Strom.
Metody řazení s lineární časovou složitostí
Skip-List je datová struktura, která může být použita jako náhrada za vyvážené stromy. představují pravděpodobnostní alternativu k vyváženým stromům (struktura.
Úvod do databází Databáze.
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.
Jazyk vývojových diagramů
Databázové systémy Štěpán Šípal.
B-strom je dynamická indexová struktura.
Architektury a techniky DS Efektivní navrhování schémat Přednáška č. 2 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy II Přednáška č. 8 – Pohledy (Views)
Databáze Tabulky a typy dat VY_32_INOVACE_7B11. Proč datové typy ? Abychom mohli do tabulky vložit data, musíme jednotlivým polím (sloupcům) přiřadit.
Školení správců II. Petr Pinkas RNDr. Vít Ochozka.
DATOVÉ MODELY (c) Tralvex Yeap. All Rights Reserved.
Databázové systémy I Cvičení č. 9 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
Relační 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.
Rauer Luboš Kopic Petr Blažek Tomáš. Structured Query Language - dotazovací jazyk -> pracuje s dotazy - neprocedurální jazyk - mocný, ale přitom jednoduchý.
Databázové systémy 2 Cvičení č. 6 Ing. Tomáš Váňa Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy II Přednáška č. X Ing. Tomáš Váňa, Ing. Jiří Zechmeister Fakulta elektrotechniky a informatiky
JavaScript Podmínky, cykly a pole.
Čí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ý.
Jazyk XML Jazyk pro tvorbu strukturovaných dokumentů Syntaxí velmi podobný HTML Hlavní cíle návrhu: Snadná editace - jazyk je textový Snadné strojové zpracování.
Architektury a techniky DS Cvičení č. 9 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy II Cvičení č. 3 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
Databázové modelování
2 Petr Žitný znalosti.vema.cz 3 Báze znalostí Nová služba zákazníkům ▸Báze naplněná informacemi, ke které mají uživatelé přímý přístup Základní cíl ▸Poskytovat.
Aplikační a programové vybavení
Databázové systémy Informatika pro ekonomy, př. 18.
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.
Architektury a techniky DS Cvičení č. 5 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy 2 Cvičení č. 5 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy Přednáška č. 5 Datové typy a Fyzická organizace dat.
MS ACCESS Databáze pro každého. Základní pojmy  Data  určitá fakta, vztahující se k objektům z reálného světa, uložená v paměti počítače  Informace.
Ú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.
Datové typy MS Access (3). Projekt: CZ.1.07/1.5.00/ OAJL - inovace výuky Příjemce: Obchodní akademie, odborná škola a praktická škola pro tělesně.
OPERAČNÍ SYSTÉMY Část 4 – správa souborů
SQL – příkaz SELECT Ing. Roman Danel, Ph.D.
KIV/ZD cvičení 5 Tomáš Potužák.
Výpočetní technika Akademický rok 2008/2009 Letní semestr
Informatika pro ekonomy přednáška 8
[ START WITH podmínka ] CONNECT BY podmínka
Optimalizace SQL dotazů
Přednáška 9 Triggery.
Algoritmizace a datové struktury (14ASD)
Transkript prezentace:

Fakulta elektrotechniky a informatiky david.zak@upce.cz Databázové systémy I Přednáška č. 8 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky david.zak@upce.cz

Databázové systémy 1 - př. 8 Obsah Sekvence Indexy Databázové systémy 1 - př. 8

Databázové systémy 1 - př. 8 Sekvence umožňují generovat jedinečné identifikátory, například hodnoty primárního klíče tabulek, databázová platforma Oracle používá tzv. sekvence, (v MySQL je např. volba autoincrement pro vybraný sloupec tabulky) při použití sekvence například pro generování primárního klíče je dobré si uvědomit, zda sekvenčně zvolený (umělý) klíč je správné řešení (někdy je vhodné použít již existující primární klíče např. z evidence obyvatel, nebo přirozené klíče). Databázové systémy 1 - př. 8

Syntaxe příkazu CREATE SEQUENCE CREATE SEQUENCE <název sekvence> [START WITH <číslo> ] [INCREMENT BY <číslo> ] [MAXVALUE <číslo> ] [MINVALUE <číslo> ] [CYCLE | NOCYCLE ] [CACHE <číslo> | NOCACHE ] START WITH počáteční hodnota generátoru, výchozí 1 INCREMENT BY interval mezi dvěma za sebou generovanými čísly, výchozí 1 CYCLE umožňuje opakované generování hodnot MAXVALUE, MINVALUE maximální a minimální hodnota CACHE kolik hodnot se generuje do paměti, výchozí 20 (po restartu databázového serveru hodnoty z paměti zmizí – nevyužité hodnoty z paměti nebudou vráceny) Databázové systémy 1 - př. 8

Databázové systémy 1 - př. 8 Použití sekvencí Existují 2 pseudosloupce, které umožňují využití sekvence: <název sekvence> . NEXTVAL Vygeneruje a vrátí další hodnotu sekvence <název sekvence> . CURRVAL Vrátí aktuální hodnotu sekvence (ta musí být předtím aspoň jednou inicializována použitím <název sekvence> . NEXTVAL) Příklad: CREATE SEQUENCE seq_studenti_id; INSERT INTO Studenti(id, jmeno, prijmeni) VALUES (seq_studenti_id.NEXTVAL, 'Karel', 'Nový'); VALUES (seq_studenti_id.NEXTVAL, 'Petr‚ 'Blažek'); Databázové systémy 1 - př. 8

Databázové systémy 1 - př. 8 Použití sekvencí Příklad: CREATE SEQUENCE seq_cyklus MINVALUE 2 MAXVALUE 5 CYCLE NOCACHE; bude postupně generovat hodnoty 2, 3, 4, 5, 2, 3, 4, 5, 2 … CREATE SEQUENCE seq_st_inc START WITH 100 INCREMENT BY 200; bude postupně generovat hodnoty 100, 300, 500, 700, 900, 1100, 1300 … Databázové systémy 1 - př. 8

Syntaxe příkazu DROP SEQUENCE Odstranění sekvence: DROP SEQUENCE <název sekvence> Příklad: DROP SEQUENCE seq_studenti_id; Databázové systémy 1 - př. 8

Databázové systémy 1 - př. 8 Indexy Fakt: záznamy v tabulkách ukládány neuspořádaně, nejčastěji v pořadí, v jakém byly do tabulky vkládány, Bez indexů (informace níže platí pro sloupec s omezením UNIQUE): záznamy hledáme od prvního záznamu postupně, dokud hledaný nenajdeme, v průměru vždy prohledáme asi polovinu záznamů, než najdeme jeden hledaný záznam tyto problémy řeší přidání dalšího objektu – INDEXu, ten obsahuje informace o tom, kde se jaký záznam nachází (podle hodnoty v indexovaném sloupci). Databázové systémy 1 - př. 8

Databázové systémy 1 - př. 8 Indexy S indexy: při hledání podle indexového sloupce stačí najít údaj v indexu a odtud získat ROWID (jedinečný identifikátor, který databázový server přiřadí každému záznamu v tabulce) a podle něho najít požadovaný záznam, v obecném případě takových řádků může být více splňujících danou podmínku moderní dtb. servery obvykle používají stromovou strukturu indexů, například B - stromy, průchod uspořádaným stromem je v průměru výrazně kratší než sekvenční hledání v neuspořádaném poli. Databázové systémy 1 - př. 8

Databázové systémy 1 - př. 8 B - strom B-strom je vyvážený strom. Tato struktura je často používána v aplikacích, kdy není celá struktura uložena v paměti RAM, ale v nějaké sekundární paměti, jako je pevný disk (například databáze). Protože přístup do tohoto typu paměti je náročný na čas (hlavně vyhledání náhodné položky), snažíme se minimalizovat počet přístupů. B-strom řádu n je takový strom, kde: všechny listy (tj. uzly, které nemají žádné potomky) jsou na stejné úrovní (ve stejné hloubce). kořen má nejvýše n potomků, spodní hranice není omezena. všechny uzly kromě kořene mají maximálně n a minimálně n/2 - 1 potomků Databázové systémy 1 - př. 8

Databázové systémy 1 - př. 8 B - strom Pokud chceme vložit nebo smazat data (klíče) z uzlu, změní se tím počet potomků tohoto uzlu. Aby se dodržel rozsah daný řádem stromu, vnitřní uzly se v případě potřeby rozdělují či slučují. Protože počet potomků každého uzlu je omezený, není potřeba vyvažovat tento strom tak často jako jiné typy automaticky vyvažovaných stromů. Jelikož strom je málokdy zcela zaplněný, musíme počítat s tím, že může docházet k nevyužití veškeré obsazené paměti (naštěstí to většinou není překážkou). Strom je vyvažován požadavkem, aby byly všechny listy na stejné úrovni. Tato hloubka pozvolna roste s tím, jak do stromu přidáváme další data, nebo klesá spolu s vymazáváním dat ze stromu. Databázové systémy 1 - př. 8

Přístup pomocí adresy ROWID ROWID jsou fyzickými adresami dat obsahuje informaci o Řádku vzhledem k souboru, Bloku, Řádku v bloku Relativní číslo souboru Hodnotu OBJECT_ID adresa ROWID je nejrychlejší cestou k určitému řádku, k většímu množství řádků nebude však nejrychlejší metodou Databázové systémy 1 - př. 8

Databázové systémy 1 - př. 8 Indexy Vlastnosti: zrychlení jen tehdy, pokud potřebujeme najít několik záznamů, pokud je cílem najít více než 5% záznamů, bude obvykle rychlejší hledání bez použití indexu, zvýšení režie při vkládání a změně dat (INSERT, UPDATE, DELETE), protože kromě zápisu do tabulky je třeba zapsat indexový údaj na přesně definované místo v indexu, nedoporučuje se používat indexy (kromě bitmapových indexů) nad tabulkami obsahujícími malé množství řádků (řádově desítky) nebo nad sloupci s nízkou variabilitou (např. sloupec pohlaví žena/muž), odstraněním indexu zůstane tabulka nezměněná. Databázové systémy 1 - př. 8

Syntaxe příkazu CREATE INDEX Vytvoří index nad uvedeným sloupcem definované tabulky. CREATE [BITMAP] INDEX <název indexu> ON <název tabulky> (<názvy sloupců>) BITMAP vytvoří bitmapový index - vhodné řešení pro sloupce s nízkou variabilitou. Lze si to představit tak, že každé hodnotě ve sloupci odpovídá jeden bit kódu, tj. pro pohlaví jsou nutné 2 bity (muž, žena), pro rodinný stav 4 bity (svobodný, ženatý, rozvedený, vdovec). Příklad: CREATE INDEX ix_uc_prijmeni ON ucitele(prijmeni); CREATE INDEX ix_st_prijmeni_jmeno ON studenti (prijmeni, jmeno); CREATE BITMAP INDEX ix_pohlavi ON ucitele(pohlavi); Databázové systémy 1 - př. 8

Syntaxe příkazu DROP INDEX Odstraní index, ale nikoli data v tabulce. DROP INDEX <název indexu> Příklad: DROP INDEX ix_jmeno; Databázové systémy 1 - př. 8

INDEXY a principy přístupových cest Přístupové cesty jsou metodami, jejichž prostřednictvím může databáze získat data z tabulek. Přístupové cesty: Přímý přístup pomocí adresy ROWID nebo algoritmu hash Indexové přístupy (např. prohledávání indexu) Úplné prohledávání (nutný průchod všemi řádky tabulky) Neexistuje jediná nejlepší cesta, kdyby existovala, používal by databázový systém jen tuto jedinou! Databázové systémy 1 - př. 8

Přístup pomocí adresy ROWID Typické použití pro přístup k tabulce po jejím prohledání pomocí některého typu indexu při použití dotazu typu: SELECT * FROM nazev_tabulky WHERE indexovany_sloupec = hodnota; Databáze provede tyto kroky: Prohledá index u indexovaného sloupce Načte hodnotu ROWID řádku, na který odkazuje Podle hodnoty ROWID přistoupí k tabulce a načte konkrétní řádek Kroky 2) a 3) opakuje, pokud více řádku splňuje danou podmínku (v případě, kdy indexovaný sloupec není unikátní) Použití tohoto přístupu lze i přímo z dotazu, pokud známe ROWID řádku, příklad: SELECT * FROM studenti WHERE ROWID='AAAVlyAAFAAAGQ3AAG' ; ROWID lze zjistit například příkazem : SELECT ROWID FROM studenti; Databázové systémy 1 - př. 8

Indexové prohledávání Jde pravděpodobně o nejoblíbenější přístupovou metodu Bloky na nejnižší úrovni stromu (listy) obsahují všechny indexované klíče a adresu ROWID, odkazující na konkrétní řádek Vnitřní bloky (větví) slouží k navigaci strukturou indexu Listové uzly indexu jsou ve skutečnosti dvojitě propojeným seznamem. Jakmile zjistíme, kde začít, je prohledání seřazených hodnot (prohledání rozsahů indexů) snadné (lze pokračovat v dalších listech, dokud nenarazíme na hodnotu vyšší než zadaná) Všechny listové bloky by měly být na stejné úrovni stromu, Většina indexů bude mít výšku 2 až 3, tj. pro vyhledání klíče bude třeba 2 nebo 3 vstupně-výstupních operací Databázové systémy 1 - př. 8

Indexové prohledávání Příklad struktury indexu B*Tree u číselného sloupce (s jedinečnými hodnotami nebo nad sloupcem, který je primárním klíčem), údaj ROWID bude obsahovat konkrétní adresu ROWID daného řádku. Databázové systémy 1 - př. 8

Prohledávání jedinečného indexu Optimalizátor pozná, že indexované sloupce v indexu jsou jedinečné Po prohledání indexu bude vrácen nejvýše jeden řádek pro jednu hodnotu v indexovaném sloupci U nejedinečného indexu jsou data v indexu seřazena podle hodnot klíče indexu a poté podle hodnoty ROWID, pro jednu hodnotu z indexovaného sloupce může být tedy v listech indexové struktury několik odkazů (obsahujících ROWID) na různé řádky tabulky) Databázové systémy 1 - př. 8

Porovnání úplného prohledávání a přístupu pomocí indexu Úplné prohledávání Pomocí indexu Horní část představuje průchod stromem indexu, spodní část přístup do tabulky a čtení konkrétního řádku. Databázové systémy 1 - př. 8

Prohledávání rozsahů indexu Rozsahy indexu mohou být prohledány jedním nebo dvěma směry (obvykle vzestupně, ale může být i sestupně) Příklad: SELECT cislo_zamestnance FROM zamestnanci WHERE cislo_zamestnance < 5000 ORDER by cislo_zamestnance DESC ; Databáze rozpozná, že se může vyhnout řazení, pokud index bude číst obráceně. Databázové systémy 1 - př. 8

Prohledávání rozsahů indexu Příklad: SELECT MAX(cislo_zamestnance) FROM zamestnanci Databáze rozpozná, že použije úplné prohledávání indexu, začte z opačného konce a zastaví se na první (nejvyšší) nalezené hodnotě. Databázové systémy 1 - př. 8

Databázové systémy 1 - př. 8 Bitmapové indexy Id Jmeno Prijmeni Pohlavi 1 Jana Veselá Ž 2 Martina Smutná 3 Simona Chladná 4 Kamil Malý M Představme si tabulku učitelé: Nad níž vytvořme bitmapový index CREATE BITMAP INDEX ix_pohlavi ON ucitele(pohlavi); ROWID Pohlaví=‘M’ Pohlaví=‘Ž’ ….. 1 Databázové systémy 1 - př. 8

Databázové systémy 1 - př. 8 Indexy - shrnutí Indexy mohou být využity například v těchto případech: Očekáváme ve výsledku řádově menší počet řádků, než obsahuje tabulka, nad níž dotaz aplikujeme, přičemž daný dotaz omezuje rozsah hodnot v indexovaných sloupcích (s indexovanými sloupci se pracuje v klauzuli WHERE) Hledáme maximální či minimální hodnotu v indexovaném sloupci Chceme získat data jen z indexovaných sloupců (poté není nutné vůbec číst data z tabulky, stačí jen ze struktury indexu) Chceme řadit výsledky dle indexovaných sloupců (postupným průchodem listy B-stromu indexové struktury získáváme správné pořadí dat na výstupu) Skupinový dotaz v klauzuli GROUP BY pracuje s indexovanými sloupci (obdobně jako u klauzule ORDER BY je pro seskupení řádků ve stejné skupině pro optimalizátor vhodné, aby tyto seskupované řádky v rámci dané skupiny následovaly vždy postupně po sobě) O využití indexové struktury rozhoduje optimalizátor. Databázové systémy 1 - př. 8