17.03.2015 Views

2. Füüsiline disain

2. Füüsiline disain

2. Füüsiline disain

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

TTÜ: Andmebaasi füüsiline <strong>disain</strong> (2012)<br />

© Erki Eessaar<br />

9. Indeks ei ole midagi sellist, mida saab luua ja siis unustada.<br />

Andmebaasi administraator peab regulaarselt indeksit jälgima ja<br />

hooldama. Kui indeks hakkab töökiirust kahjustama, siis tuleb see<br />

eemaldada.<br />

10.Väldi B-puu indekseid veergudel, kus on palju ühesuguseid väärtuseid.<br />

11.Indeksid, mille alusel saab vastata päringule ilma tabeli plokke<br />

lugemata (ingl. k. covering index), on kasulikud, kuid praktikas<br />

kasutatakse neid liiga palju. See võib halvendada päringute töökiirust.<br />

1<strong>2.</strong>Bitmap indeksid on kasulikud suurte andmehulkadega (terabaidid,<br />

petabaidid) andmebaasides, eriti andmeaitades.<br />

<strong>2.</strong><strong>2.</strong>3.20 Indeksi kasutamine andmebaasisüsteemi poolt<br />

Andmebaasisüsteemi üks moodul on optimeerija, mille ülesandeks on valida<br />

välja kiireim viis andmekäitluskeele lause täitmiseks. Optimeerimise moodul<br />

peab ka valima, kas ja milliseid indekseid lause täitmiseks kasutatakse.<br />

Optimeerimise moodul koostab päringu täitmisplaani (ingl. k. Query Execution<br />

Plan). Andmebaasisüsteemi üheks võimalikuks funktsionaalsuseks on<br />

analüüsimine, miks mingi päring töötab aeglaselt ja kuidas seda võib<br />

kiirendada.<br />

Näide: Andmebaasisüsteemis PostgreSQL on võimalik kasutada SQL käsku<br />

EXPLAIN, mis näitab päringu füüsilist täitmisplaani (vt. teema 11). EXPLAIN<br />

käsku saab kasutada erinevate päringute täitmisaja hindamiseks. Süntaks:<br />

EXPLAIN [ VERBOSE ] query<br />

See käsk näitab PostgreSQLi poolt genereeritavat lause täitmisplaani.<br />

Täitmisplaan kirjeldab sisemise taseme operatsioonid ning nende täitmise<br />

järjekorra, mida andmebaasisüsteem peab läbi viima välisel või<br />

kontseptuaalsel tasemel esitatud lause täitmiseks. Näiteks juhul, kui<br />

ühendatakse kokku mitu tabelit, näidatakse millise algoritmi alusel ridu<br />

ühendatakse (võimalike algoritmide näited on nested loop join, hash join,<br />

merge join).<br />

Näide:<br />

EXPLAIN SELECT * FROM Emp NATURAL JOIN Dept;<br />

QUERY PLAN<br />

--------------------------------------------------------------------<br />

Hash Join (cost=18.00..4<strong>2.</strong>25 rows=570 width=198)<br />

Hash Cond: ("outer".deptno = "inner".deptno)<br />

-> Seq Scan on emp (cost=0.00..15.70 rows=570 width=108)<br />

-> Hash (cost=16.40..16.40 rows=640 width=92)<br />

-> Seq Scan on dept (cost=0.00..16.40 rows=640 width=92)<br />

(5 rows)<br />

Andmebaasisüsteem koostab mitu võimalikku täitmisplaani ja arvutab<br />

andmebaasi statistikat kasutades välja iga plaani maksumuse – hinnangu<br />

42

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!