Sobes.tech
Junior

U kojim slučajevima se koriste indeksi u bazama podataka?

sobes.tech АИ

Одговор од АИ

Indeksi u bazama podataka koriste se za optimizaciju brzine izvršavanja upita, posebno:

  • Pretraživanje podataka: Ubrzavanje operacija SELECT, posebno sa uslovima WHERE, JOIN i ORDER BY. Indeks omogućava DBMS-u da brže pronađe potrebne redove, bez skeniranja cele tabele.
  • Sortiranje: Ubrzavanje sortiranja pomoću ORDER BY. Ako postoji indeks na kolonama sortiranja, DBMS može koristiti njihov redosled, izbegavajući dodatne operacije sortiranja.
  • Spajanje tabela: Ubrzavanje operacija JOIN na indeksiranim kolonama. Indeks pomaže brzo pronalaženje odgovarajućih redova u povezanim tabelama.
  • Jedinstvenost podataka: Garantuje jedinstvenost vrednosti u koloni (kroz jedinstveni indeks).
  • Primarni ključevi: Primarni ključ je po defaultu jedinstveni indeks i koristi se za brzo pristupanje redovima po jedinstvenom identifikatoru.
  • Sekundarni ključevi: Koriste se za obezbeđivanje integriteta referencijalnih podataka i ubrzavanje operacija JOIN između povezanih tabela.

Primeri kolona za indeksiranje:

  • Kolone na kojima se često vrši pretraživanje (WHERE uid = 123).
  • Kolone koje se koriste u uslovima JOIN (table1.id = table2.ref_id).
  • Kolone na kojima se često vrši sortiranje (ORDER BY created_at DESC).
  • Kolone sa visokom kardinalnošću (mnogo jedinstvenih vrednosti).

Situacije kada indeksi mogu biti neefikasni ili nepotrebni:

  • Veoma male tabele: U malim tabelama skeniranje može biti brže ili uporedivo sa pretraživanjem putem indeksa.
  • Kolone sa niskom kardinalnošću: Indeks na koloni sa malim brojem jedinstvenih vrednosti (npr. boolean polje TRUE/FALSE) možda neće doneti značajno ubrzanje.
  • Česte operacije zapisivanja (INSERT, UPDATE, DELETE): Indeksi zahtevaju ažuriranje pri promeni podataka, što može usporiti operacije zapisivanja. Nije preporučljivo indeksirati sve kolone bez razmišljanja.
  • Kolone u uslovima WHERE sa funkcijama: Ako se funkcija primenjuje na koloni u WHERE (npr. WHERE YEAR(date_column) = 2023), običan indeks na date_column se ne koristi. Potreban je funkcionalni indeks (ako ga podržava DBMS) ili prepravka upita.

Izbor kolona za indeksiranje i tip indeksa (B-tree, hash, full-text itd.) zavisi od specifičnosti podataka, karakteristika upita i korišćenog DBMS-a.