Arvutiteaduse instituut
  1. Kursused
  2. 2024/25 kevad
  3. Andmebaasid (LTAT.03.004)
EN
Logi sisse

Andmebaasid 2024/25 kevad

  • Kursuse korraldus
  • Loengud
  • Praktikumid
  • Kodulugemised (autorid: Margus Roo ja Piret Luik)
  • Rühmatöö

Indeksite loomine

Indeksi loomine

Nagu loengus rääkisime, loome indekseid eelkõige neile atribuutidele, mida sageli kasutame päringu WHERE osas. Indeksi loomine:

CREATE INDEX indeksi_nimi ON tabeli_nimi [USING method]
(veerunimi [ASC | DESC] [NULLS {FIRST | LAST }],
    ...
); 

Veerunimesid võib olla üks (ühe välja indeks) või mitu (mitme välja indeks). Vaikimisi on veeru järjekord ASC, kui tahta muuta, peab kindlasti lisama DESC. Samamoodi on vaikimisi NULLS LAST (ehk siis tühjad väljad lõpus) kui järjekord on ASC ja NULLS FIRST kui järjekord on DESC.

Loome indeksi isikute tabelile võttes indeksiväljaks isikukoodi:

CREATE INDEX ix_isikukood 
ON Isikud (isikukood);

Siin kuna me ei määratlenud, kas on järjestus kasvav või kahanev, siis vaikimisi võeti kasvav (ASC) järjestus. Kui isikukoodi väli võib olla sisestamata, siis sellisel juhul tühjad väljad on lõpus. Kui tahame, et isikukoodi indeks oleks kahaneva järjestuse peale, aga ikka nii, et tühjad väljad oleks kõige lõpus, peame kirjutama:

CREATE INDEX ix_isikukood_teistpidi 
ON Isikud (isikukood DESC NULLS LAST);

Meeldetuletus loengust, indekseid luuakse veergudele, millel on palju unikaalseid väärtusi (meil isikukood on selline) ja ei looda veergudele, millel on palju NULL väärtusi.

Taas teeme kokkuleppe nimede osas. Oma aines indekseid luues kirjutame indeksi nime ette ix_. Ja veelkord ka meeldetuletus, et see pole üldlevinud, igas töörühmas on oma reeglid ja kokkulepped.

Olemasolevad indeksid ja indeksi detailide vaatamine DBeaver rakenduses

Olemasolevaid indekseid näeb DBeaver rakenduses tabeli juurest, millele me indeksi lisasime. Vajadusel uuendage (Refresh).

Uuendades DBeaver vaates indeksite nimekirja näeme, et loodud indeks on ilmunud teiste indeksite hulka. Primaarvõtmed ja unikaalsuse kitsendused lähevad automaatselt indeksiteks.
Olemasoleva indeksi loomise SQL käsku näeb, kui indeksi peal parempoolse hiireklahviga valida ”Generate SQL” ja uues avanenud menüüs “DDL”, mille tulemusena avaneb uues aknas valitud indeksi loomise SQL lause.

Nagu loengus rääkisime, siis kui WHERE osas kasutatakse sageli mitme tunnuse kombinatsiooni, on otstarbekas luua indeks, mis kasutaks mitut atribuuti ehk siis mitme välja indeks. Näiteks meie male andmebaasis on sageli vaja isikuid koos ees- ja perenimega. Loome selleks kahe atribuudiga indeksi:

CREATE INDEX ix_nimi 
ON Isikud (perenimi, eesnimi);

PostgreSQL'is saab täpsustada, kas indeks on unikaalsele väljale loodud (indeksi loomise lauses täpsustus UNIQUE). Kui valida unikaalne indeks UNIQUE, siis peab olema tabeli definitsioonis vastav atribuut unikaalsena defineeritud. Kui aga see unikaalne atribuut sisaldab ka tühje väätusi (NULL väätusi), siis peaks lisama veel indeksi loomise lause lõppu klausli: NULLS [NOT] DISTINCT vastavalt sellele, kas tühje väärtusi eristada või mitte.

CREATE INDEX indeksi_nimi ON tabeli_nimi USING indeksi_tüüp (atribuudid);

Indeksi tüüp määrab ära algoritmi, mida indeks kasutab. PostgreSQL versioon 14 kasutab vaikimisi (kui indeksi tüüp ei ole valitud) tüübi B-Tree. Rohkem informatsiooni erinevate indeksi tüüpide kohta saab lugeda PostgreSQL dokumentatsioonist aadressil https://www.postgresql.org/docs/14/indexes-types.html.

Indekseid saab luua ka materialiseeritud vaadetele, kuid mitte tavalisetele vaadetele. Loome indeksi neljandas kodutöös loodud materialiseeritud vaatele mv_partiide_arv_valgetega, kus indeksi väljaks on partiisid_valgetega.

CREATE INDEX ix_partiisid 
ON mv_partiide_arv_valgetega (partiisid_valgetega);

NB! Indekseid ei saa luua kui keegi teine kasutab tabelit!

Indeksit kustutatakse

DROP INDEX <indeksi_nimi>;

Kontrollimaks, kas said indeksite loomisest aru ava soovi korral test.
AVA TEST

Link PostgreSQL dokumentatsioonile

Protseduuride loomineTrigerite loomine
  • Arvutiteaduse instituut
  • Loodus- ja täppisteaduste valdkond
  • Tartu Ülikool
Tehniliste probleemide või küsimuste korral kirjuta:

Kursuse sisu ja korralduslike küsimustega pöörduge kursuse korraldajate poole.
Õppematerjalide varalised autoriõigused kuuluvad Tartu Ülikoolile. Õppematerjalide kasutamine on lubatud autoriõiguse seaduses ettenähtud teose vaba kasutamise eesmärkidel ja tingimustel. Õppematerjalide kasutamisel on kasutaja kohustatud viitama õppematerjalide autorile.
Õppematerjalide kasutamine muudel eesmärkidel on lubatud ainult Tartu Ülikooli eelneval kirjalikul nõusolekul.
Courses’i keskkonna kasutustingimused