Sobes.tech
Junior

Millistel juhtudel kasutatakse andmebaasides indekseid?

sobes.tech AI

Vastus AI-lt

Andmebaaside indeksid kasutatakse päringute kiiruse optimeerimiseks, eriti:

  • Andmete otsimine: SELECT-i operatsioonide kiirendamine, eriti WHERE, JOIN ja ORDER BY tingimustega. Indeks võimaldab DBMS-il kiiremini leida vajalikud read, mitte kogu tabelit skaneerida.
  • Sorteerimine: Sorteerimise kiirendamine ORDER BY abil. Kui sorteerimise veergudel on indeks, saab DBMS kasutada selle järjekorda, vältides täiendavaid sorteerimisoperatsioone.
  • Tabelite ühendamine: Indekseeritud veergude JOIN operatsioonide kiirendamine. Indeks aitab kiiresti leida seotud tabelite vastavaid ridu.
  • Andmete unikaalsus: Vahend unikaalsuse tagamiseks veerus (unikaalse indeksi kaudu).
  • Esmane võtmed: Esmane võti on vaikimisi unikaalne indeks ja seda kasutatakse kiireks juurdepääsuks reale unikaalse identifikaatori järgi.
  • Teisese võtmed: Kasutatakse viidatud andmete terviklikkuse tagamiseks ja JOIN operatsioonide kiirendamiseks seotud tabelite vahel.

Indekseerimiseks sobivad veerud:

  • Veerud, mille järgi sageli otsitakse (WHERE uid = 123).
  • Veerud, mida kasutatakse JOIN tingimustes (table1.id = table2.ref_id).
  • Veerud, mille järgi sageli sorteeritakse (ORDER BY created_at DESC).
  • Veerud, millel on kõrge kardinaliteet (palju unikaalseid väärtusi).

Juhtumid, kus indeksid võivad olla eefektiivsed või tarbetud:

  • Väga väikesed tabelid: Väikestes tabelites võib skaneerimine olla kiirem või võrreldav indeksiga otsimisega.
  • Väikese kardinaliteediga veerud: Indeks veerus, millel on vähe unikaalseid väärtusi (näiteks boolean väli TRUE/FALSE), ei pruugi anda märkimisväärset kiirendust.
  • Sagedased kirjutamisoperatsioonid (INSERT, UPDATE, DELETE): Indeksid vajavad uuendamist andmete muutmisel, mis võib aeglustada kirjutamisoperatsioone. Ei ole soovitatav indeksida kõiki veerge ilma põhjuseta.
  • Veerud WHERE-tingimustes funktsioonidega: Kui funktsioon rakendub veerule WHERE-tingimuses (näiteks WHERE YEAR(date_column) = 2023), siis tavalist indeksit ei kasutata. Vajalik on funktsionaalne indeks (kui DBMS seda toetab) või päringu ümberkirjutamine.

Indeksitegemise valik veergude kaupa ja indeksi tüüp (B-puu, hash, täistekst jne) sõltub andmete spetsiifikast, päringute iseloomust ja kasutatavast DBMS-ist.