17.03.2015 Views

2. Füüsiline disain

2. Füüsiline disain

2. Füüsiline disain

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

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

© Erki Eessaar<br />

Olenevalt andmebaasisüsteemist käsitletakse NULLe erinevalt. Olgu tabel<br />

Tudeng. Veerg perenimi on mittekohustuslik. Sellele luuakse indeks.<br />

Tavaliselt NULLe ei indekseerita ja seega järgnevad päringud ei kasuta<br />

perenime veerule loodud indeksit:<br />

SELECT *<br />

FROM Tudeng<br />

WHERE pnimi IS NULL;<br />

SELECT Count(*) AS arv FROM Tudeng;<br />

Viimase päringu puhul on indekseeritud ridade arv väiksem kui tegelikult<br />

tabelis olevate ridade arv ja seetõttu pole andmebaasisüsteemil mõtet indeksit<br />

kasutada vaid toimub tabeli läbiskaneerimine.<br />

Sellistele veergudele, mida kasutatakse koos ühes ja samas WHEREklauslis,<br />

on mõtet luua ühine, liitindeks e. mitmekomponendiline (mitut<br />

veergu hõlmav) indeks. Millal liitindeksit kasutada?<br />

• Veerge kasutatakse sageli üheskoos päringu WHERE klauslis ning selle<br />

alamtingimused on seotud AND operatsiooniga.<br />

SELECT *<br />

FROM Isik<br />

WHERE eesnimi='Jaan' AND perenimi='Mets';<br />

• Veergude kombinatsioon annab oluliselt parema selektiivsuse (või koguni<br />

garanteerib unikaalse väärtuse) kui iga veerg eraldi.<br />

• Tüüpilised päringud kasutavad päringu tingimuses ühte ja sama veergude<br />

komplekti vaadeldavast tabelist. Sellise veergude komplekti koondamisel<br />

indeksisse saavutatakse, et päringud saavad vastused kätte otse<br />

indeksist, ilma tabeli poole pöördumata.<br />

Liitindeksite kasutamisel on oluline komponendiks olevate veergude järjestus<br />

indeksi loomise lauses. Oletame, et meil on tabel ja indeks:<br />

t(a, b, c, d, e) Primaarvõti(e);<br />

CREATE INDEX t_idx ON t(a, b, c);<br />

Loodud indeksit kasutatakse näiteks järgmiste päringute täitmisel:<br />

SELECT * FROM t WHERE a=:a;<br />

SELECT * FROM t WHERE a=:a AND b=:b;<br />

SELECT * FROM t WHERE a=:a AND b=:b AND c=:c;<br />

Päring, mille tingimuses ei ole kõige esimest liitindeksisse kuuluvat veergu<br />

(antud juhul a), sellist liitindeksit ei kasuta.<br />

SELECT * FROM t WHERE b=:b;<br />

30

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

Saved successfully!

Ooh no, something went wrong!