Indexek és SQL hangolás

Hasonló dokumentumok
Indexek és Teljesítményoptimalizálás

TABLE ACCESS FULL HASH CLUSTER BY INDEX ROWID BY USER ROWID BY GLOBAL INDEX ROWID BY LOCAL INDEX ROWID

Az indexelés újdonságai Oracle Database 12c R1 és 12c R2

8. Gyakorlat SQL. DDL (Data Definition Language) adatdefiníciós nyelv utasításai:

Adatbázis-lekérdezés. Az SQL nyelv. Makány György

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17

Betekintés az SQL hangolásba Oracle környezetben

Adatbázisok* tulajdonságai

Tartalomjegyzék. Tartalomjegyzék 1. Az SQL nyelv 1 Az SQL DDL alapjai 2

INDEXSTRUKTÚRÁK III.

Adatbáziskezelő-szerver. Relációs adatbázis-kezelők SQL. Házi feladat. Relációs adatszerkezet

Adatbáziskezelı-szerver SQL. Relációs adatbázis-kezelık. Relációs adatszerkezet. Házi feladat

Adattípusok. Max. 2GByte

SQL. Táblák összekapcsolása lekérdezéskor Aliasok Allekérdezések Nézettáblák

Adatbázis-kezelés. Harmadik előadás

Adattípusok. Max. 2GByte

SQL ALAPOK. Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai

SELECT DISTINCT deptno FROM emp; (distinct) SELECT STATEMENT HASH UNIQUE TABLE ACCESS FULL EMP

Nem klaszterezett index. Klaszterezett index. Beágyazott oszlopok. Index kitöltési faktor. Indexek tulajdonságai

Adatbázis kezelés Delphiben. SQL lekérdezések

Adatbázisműveletek és lekérdezésoptimalizálás

Java és web programozás

SQL haladó. Külső összekapcsolások, Csoportosítás/Összesítés, Beszúrás/Törlés/Módosítás, Táblák létrehozása/kulcs megszorítások

Tranzakciókezelés PL/SQL-ben

Nem klaszterezett index. Beágyazott oszlopok. Klaszterezett index. Indexek tulajdonságai. Index kitöltési faktor

Bevezetés: az SQL-be

ADATBÁZIS-KEZELÉS - BEVEZETŐ - Tarcsi Ádám, ade@inf.elte.hu

Adatbázis rendszerek SQL nyomkövetés

B I T M A N B I v: T M A N

Adatbázisok-1 előadás Előadó: dr. Hajas Csilla

A relációs adatbáziskezelés szabványos nyelve Két fő csoportba sorolhatók az utasításai

BEVEZETÉS Az objektum fogalma

Lekérdezések az SQL SELECT utasítással

Adatok szűrése, rendezése

Célkitűzések Az Oracle10 g felépítésének, használatának alapszíntű megismerése

Adatbázis, adatbázis-kezelő

Több tábla összekapcsolásán alapuló lekérdezések. Copyright 2004, Oracle. All rights reserved.

ADATBÁZIS-KEZELÉS FÉLÉVES FELADAT

SQL PÉLDATÁR. készült a PTE TTK Iskolai informatika III. kurzus teljesítésére

Adatbázis Rendszerek I. 10. SQL alapok (DML esettanulmány)

Lekérdezések az SQL SELECT utasítással. Copyright 2004, Oracle. All rights reserved.

Bevezetés az SQL-be. Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009

Gyakorlás: Hozzunk létre egy Alkalmazottak táblát AZO szám, Részleg szöveg, Munkakör szöveg és BelépésDátuma dátum típussal.

Készítette: Szabóné Nacsa Rozália

Fájlszervezés. Adatbázisok tervezése, megvalósítása és menedzselése

Adatbázisok I. Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

Adatbázisok. 9. gyakorlat SQL: SELECT október október 26. Adatbázisok 1 / 14

Nézetek és indexek. AB1_06C_Nézetek_Indexek - Adatbázisok-1 EA (Hajas Csilla, ELTE IK) - J.D. Ullman elıadásai alapján

INFORMATIKA ÁGAZATI ALKALMAZÁSAI. Az Agrármérnöki MSc szak tananyagfejlesztése TÁMOP /1/A

Adatbázisok. 2. gyakorlat SQL november november 12. Adatbázisok 1 / 31

Tábla létrehozása: CREATE TABLE alma( ID INT( 3 ) NOT NULL PRIMARY KEY, Leiras VARCHAR( 100 ) );

LBRA6i integrált rendszer

ADATBÁZISOK gyakorlat: SQL 2. rész SELECT

Az SQL nyelv Structured Query Language (Struktúrált lekérdező nyelv)

5. téma XML DB. Az adatkezelés és XML kapcsolata. Miért fontos az XML használata az adatbázis kezelésben?

IBM WebSphere Adapters 7. változat 5. alváltozat. IBM WebSphere Adapter for Oracle E-Business Suite felhasználói kézikönyv 7. változat 5.

SQL- Utasítások csoportosítása Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

AB1 ZH mintafeladatok. 6. Minősítse az állításokat! I-igaz, H-hamis

SQL parancsok feldolgozása

SQLServer. Particionálás

SQL DDL-2 (aktív elemek) triggerek

MS ACCESS 2010 ADATBÁZIS-KEZELÉS ELMÉLET SZE INFORMATIKAI KÉPZÉS 1

Java és web programozás

Több tábla összekapcsolásán alapuló lekérdezések

Marton József BME-TMIT. Adatbázisok VITMAB november 11.

Táblakezelés: Open SQL Internal table. Tarcsi Ádám: Az SAP programozása 1.

Programozás. Adatbázis-kezelés (alapok) Fodor Attila

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE) október október 22. Adatbázisok 1 / 14

A szürke háttérrel jelölt fejezet/alfejezet szövege a CD-mellékleten található. A CD-melléklet használata. 1. Elméleti áttekintés 1

Többtáblás lekérdezések megjelenítése

Informatikai alapismeretek Földtudományi BSC számára

Elemi alkalmazások fejlesztése IV.

BGF. 4. Mi tartozik az adatmodellek szerkezeti elemei

Indexek, tömörítés és más állatfajták

Adatbázis Rendszerek II. 8. Gyakorló környezet

STRUCTURED QUERY LANGUAGE(SQL) - ALAPOK

A könyv tartalomjegyzéke

Együttes hozzárendelés

Az SQL adatbázisnyelv: DML

SELECT. SELECT(projekció) FROM(forrás) WHERE(szűrés) GROUPBY(csoportosítás) HAVING(csoportok szűrése) ORDERBY(rendezés)

LOGISZTIKAI ADATBÁZIS RENDSZEREK BEVEZETÉS

MySQL. Elektronikus jegyzet Széchenyi István Egyetem Távközlési tanszék

RELÁCIÓS LEKÉRDEZÉSEK OPTIMALIZÁLÁSA. Marton József november BME TMIT

Adatbázisok elmélete 9. előadás

LOGISZTIKAI ADATBÁZIS RENDSZEREK JOIN, AGGREGÁCIÓ

SQL. 1.rész. 1.elıadás // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 1

Access alapok. Megnevezés Művelet Minta. Új adatbázis létrehozása. Új / Üres adatbázis.. Tábla létrehozása tervező nézetben.

Adatbázisok elmélete 9. előadás

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 4.ELŐADÁS. Adatbázis alapú alkalmazások készítése PHP-ben

Adatbázis használat I. 2. gyakorlat

LEKÉRDEZÉSEK OPTIMALIZÁLÁSA

SQL gyakorló feladatok. 6. Adatbázis gyakorlat április 5.

SQLServer. DB Recovery modes

GEIAL Kovács László. GEIAL Kovács László GEIAL Kovács László

SQL jogosultság-kezelés. Privilégiumok Grant és Revoke Grant Diagrammok

Informatikai képzés Információs rendszerek dr. Hajas Csilla (ELTE IK)

Kalmár György Adatbázis alapú rendszerek

Adatbázis-kezelés, információs-rendszerek

Adatbázis rendszerek. Molnár Bence. Szerkesztette: Koppányi Zoltán

Gazdasági folyamatok térbeli elemzése. 5. elıadás

Átírás:

Indexek és SQL hangolás Ableda Péter abledapeter@gmail.com Adatbázisok haladóknak 2012. 2012. november 20.

Miről lesz szó? Történelem Oracle B*-fa Index Felépítése, karbantartása, típusai Bitmap index Index Organized Table Domain index Betekintés az SQL hangolásba Kérdések, válaszok 2012. szeptember 18. 2.

Az indexkezelés története A hierarchikus adattárolás után a relációs adattárolás jelentős teljesítménybeli visszalépést jelentett IBM (DB2) Clustering (hierarchikus elrendezést örökli hatékony lekérdezés, rossz DML) Ingress Hashing (Elsődleges kulcs transzformációja hatékony, de általában kevés) Oracle Indexing

B*-fa Root node (gyökér) Branch node (ág) Leaf node (levél)

B*-fa indexek karbantartása Insert: Levél blokk megtelik: Vágás (Split) - 50%-50% arányban Túlcsordulás (Overflow) - 90%-10% arányban Delete: Csak logikai törlés (flag beállítása) Újraépítés (Rebuild Index) Update: ~Delete+Insert

Indexek csoportosítása (Unique/Non-Unique) Create index/create (unique) index automatikus Fizikai tárolásban nincs különbség közöttük Unique Biztosítja az egyediséget (több NULL is lehet) Első találat találat Gyorsabb keresés 2012. szeptember 18. 6.

Indexek csoportosítása (Single / Concatenated) Single (egyoszlopos) Automatikusan létrejön a Primary key és Unique oszlopokra Null értékek kezelése A null értékek nem kerülnek be az indexbe (több hátrány mint előny) Pl: Sorok számának meghatározásához nem lehet indexet használni (kiv. not null oszlop)

Indexek csoportosítása (Single / Concatenated) Concatenated index (többoszlopos vagy kompozit index) Több oszlop egy indexben Fontos a sorrend Csak akkor használható, ha az első néhány oszlop szerepel az utasítás (select, update, delete) where feltételében* A kardinalitás (számosság) szempontjából viszont mindegy Jobb mint több single index használata Gyorsabb lekérdezés Gyorsabb frissítés Túl sok oszlop esetén kevés kulcs fér egy blokkba magas lesz az index

Indexek csoportosítása (Normal / Reverse key) 99%-ban normal Reverse key Speciális probléma: Right most index leaf block contention Megoldás: visszafelé olvassuk a számokat, és úgy helyezzük el az indexben. Probléma: Csak egyezőség vizsgálható

Function Based Indexek Függvény vagy kifejezés értékét tárolják az indexben Példa: SELECT * FROM employees WHERE UPPER(first_name) = 'AUDREY' SELECT employee_id, 12*salary*commission_pct FROM employees WHERE (12 * salary * commission_pct) < 30000

Bitmap index Tábla Bitmap Név Nem fiú lány Boszorka lány 0 1 Hapci fiú 1 0 Hófehérke lány 0 1 Kuka fiú 1 0 Morgó fiú 1 0 Szende fiú 1 0 Szundi fiú 1 0 Tudor fiú 1 0 Vidor fiú 1 0

Bitmap index Alacsony kardinalitású oszlopokra érdemes Read only táblák esetében jó (adattárház) Nagyon hatékonytalan DML műveletek esetén Probléma: Blokk szintű lockolás Gyakorlat: Frissítés helyett inkább Drop-Create Nagyon kis helyet foglal Drop-Create esetén 1G tábla 1M index

Index Organized Table Hagyományos táblákban az adatok rendezetlenül vannak Index Organized Table: Elsődleges kulcs szerint rendezett B-fában tároljuk az adatokat

Index Organized Table Primary Key szerinti keresés esetén hatékonyabb nem kell plusz blokkhozzáférés Nem kell külön index az elsődleges kulcsra (kevesebb tárhelyet igényel) Másodlagos indexek használata lassabb, mint egyszerű táblák esetében Overflow (megoldás a sokszintű fa elkerülésére) Ritkán használt (nem kulcs) oszlopokat ki lehet emelni egy külön kupacba kisebb B-fa méret

Domain index Oracle engedi, hogy saját indextípusokat definiáljunk. Alkalmazás-specifikus indexeket hozhatunk létre Példa: Virage Képek, videók indexelése Spatial Térképadatbázis

Query Optimizer Feladat: Deklaratív kérés átalakítása procedurális utasítások sorozatára

Végrehajtási terv SELECT first_name, last_name, salary FROM employees WHERE email IS NOT NULL AND salary > 500 ORDER BY salary Execution Plan Plan hash value: 3447538987 Id Operation Name Rows Bytes Cost (%CPU) Time 0 SELECT STATEMENT 107 2889 4 (25) 00:00:01 1 SORT ORDER BY 107 2889 4 (25) 00:00:01 * 2 TABLE ACCESS FULL EMPLOYEES 107 2889 3 (0) 00:00:01 Predicate Information (identified by operation id): 2 filter("salary">500)

Full Table Scan Minden rekordot sorról sorra beolvasunk Az adatokon való szekvenciális keresés indexek használata nélkül Legegyszerűbb, de leglassabb megoldás Használjuk, ha: Nincs index (nem elérhető) a táblán Az összes adatra szükség van Túl kicsi a tábla, nem éri meg indexekhez nyúlni

Full Index Scan A teljes indexet végigolvassuk Előnye: Nem szükséges az adatok rendezése, hiszen azok az indexben rendezve vannak.

Fast Full Index Scan A Full Table Scan alternatívája Az indexekből olvassa ki az adatokat, a táblához nem kell hozzáférnie Használjuk, ha: Az index a lekérdezés végrehajtásához szükséges minden oszlop értékét tartalmazza

Fast Full Index Scan SELECT last_name, salary FROM employees Execution Plan Plan hash value: 225593660 Id Operation Name Rows Bytes Cost (%CPU) Time 0 SELECT STATEMENT 107 1284 1 (0) 00:00:01 1 INDEX FULL SCAN EMP_DEPTID_LASTNAME_SALARY_IX 107 1284 1 (0) 00:00:01

Index Unique Scan Egy (vagy 0) sort kapunk vissza Unique index kell hozzá Használható: Ha létezik index a WHERE feltételben lévő oszlopra

Index Unique Scan SELECT * FROM employees WHERE employee_id = 5 Execution Plan Plan hash value: 1833546154 Id Operation Name Rows Bytes Cost (%CPU) Time 0 SELECT STATEMENT 1 69 1 (0) 00:00:01 1 TABLE ACCESS BY INDEX ROWID EMPLOYEES 1 69 1 (0) 00:00:01 * 2 INDEX UNIQUE SCAN EMP_EMP_ID_PK 1 0 (0) 00:00:01 Predicate Information (identified by operation id): 2 access("employee_id"=5)

Index Range Scan 0, 1, vagy több sort ad vissza Használjuk, ha: A Where feltétel valamilyen összehasonlító operátort használ

Index Range Scan SELECT * FROM employees WHERE last_name LIKE 'A%' Execution Plan Plan hash value: 2077747057 Id Operation Name Rows Bytes Cost (%CPU) Time 0 SELECT STATEMENT 3 207 2 (0) 00:00:01 1 TABLE ACCESS BY INDEX ROWID EMPLOYEES 3 207 2 (0) 00:00:01 * 2 INDEX RANGE SCAN EMP_NAME_IX 3 1 (0) 00:00:01 Predicate Information (identified by operation id): 2 access("last_name" LIKE 'A%') filter("last_name" LIKE 'A%')

Index Skip Scan Composite index Csak akkor használható, ha az első néhány oszlop szerepel a query where feltételében* Fel tudjuk használni az indexet akkor is, ha nem tartalmazza a lekérdezés az első néhány oszlopot Csak akkor hatékony, ha a vezető oszlop kardinalitása alacsony

Index Skip Scan Elérhető egy (cust_gender, cust_email) oszlopokból álló composite index. SELECT * FROM sh.customers WHERE cust_email = 'Abbey@company.com' Execution Plan Plan hash value: 1287876719 Id Operation Name Rows Bytes Cost (%CPU) Time 0 SELECT STATEMENT 33 5973 10 (0) 00:00:01 1 TABLE ACCESS BY INDEX ROWID CUSTOMERS 33 5973 10 (0) 00:00:01 * 2 INDEX SKIP SCAN CUSTOMERS_GENDER_EMAIL 33 4 (0) 00:00:01 Predicate Information (identified by operation id): 2 access("cust_email"='abbey@company.com') filter("cust_email"='abbey@company.com')

Index Skip Scan SELECT * FROM sh.customers WHERE cust_email = 'Abbey@company.com' Execution Plan Plan hash value: 1287876719 Id Operation WHERE Name cust_gender Rows = 'M' Bytes Cost (%CPU) Time 0 SELECT STATEMENT AND cust_email = 'Abbey@company.com' 33 5973 10 (0) 00:00:01 1 TABLE ACCESS BY INDEX ROWID CUSTOMERS 33 5973 10 (0) 00:00:01 * 2 INDEX SKIP SCAN CUSTOMERS_GENDER_EMAIL 33 4 (0) 00:00:01 Predicate Information (identified by operation id): 2 access("cust_email"='abbey@company.com') filter("cust_email"='abbey@company.com') SELECT * FROM sh.customers WHERE cust_gender = 'F' AND cust_email = 'Abbey@company.com' UNION ALL SELECT * FROM sh.customers

Összefoglalás Cél: Az adatbázis teljesítményének növelése (mindegy, hogy milyen eszközökkel) Lekérdezések gyorsítása Karbantartási költség minimalizálása Sok index / Kevés index Csak ésszel Ökölszabály: 1 table insert 2 index insert Pl: 10 index/tábla > (1 + 20) egységnyi költség

Kérdések válaszok (?) 2012. szeptember 18. 30.

Köszönöm a figyelmet! Ableda Péter abledapeter@gmail.com Adatbázisok haladóknak 2012. 2012. szeptember 18.