U trendu

SQL – Šta su indeksi?

Jedna od veoma važnih aktivnosti prilikom dizajniranja baze podataka je pravilno definisanje tabela. Prilikom ovoga SQL server ne vodi računa o fizičkom smeštaju podataka, osim ograničenja tipom podatka i definisanjem primarnog ključa. Ali ovim se ne vrše nikakve optimizacije nad tabelama radi bržeg odziva, tj. vraćanja rezultata upita. Za ovo je zadužen mehanizam indeksa tabela koje mi moramo da definišemo. Zamislite slučaj da nema indeksa, prilikom nekog upita server bi morao da prođe kroz sve slogove u tabeli u cilju pronalaska odgovarajućih slogova. U slučaju ogromnih baza podataka, vreme potrebno za vraćanje rezultata upita je mnogo duže nego kada se definišu indeksi.

Kao primer navešćemo analogiju između SQL baze podataka i medicinske kartoteke. Slučaj kada nemamo definisane indekse, analogan je neuređenoj kartoteci, tj. kartoteci koja nije složena ni po jednom osnovu. Kada bi recimo medicinska sestra trebalo da pronađe neki karton osiguranika, verovatno bi krenula sa jednog kraja i redom pretraživala, sve dok ne bi naišla na odgovarajući. Kada se cela kartoteka složi recimo po početnom slovu prezimena, pretraga za određenim kartonom je neuporedivo brža. Sada zamislite da se kartoteka može poređati i po: godini rođenja, mestu rođenja, polu i sl. Na ovaj način smo kreirali kataloge, pa kada tražimo određeni karton, prvo pogledamo u katalog, vidimo gde se nalazi karton (na kojoj polici – adresa) i idemo odmah da ga nađemo. Sve ovo je analogno indeksima baze podataka, što znači da su indeksi katalozi o podacima u određenim tabelama. Indeksi su još jedna vrsta informacije koja se mora čuvati i za njih se mora odvojiti memorijski prostor unutar baze podataka.

Određivanje indeksa se vrši u odnosu na sam kontekst baze podataka, zbog najbolje optimizacije definisanih upita. Osnovna SQL sintaksa za kreiranje indeksa je sledeća:


CREATE INDEX /naziv_indeksa/
ON /naziv_tabele/ (naziv_polja1, naziv_polja2…);

Evo kako bi indeksirali tabelu o nekakvim proizvodima koji pored drugih obeležja imaju i obeležje „Šifra artikla“, te ćemo po ovom obeležju indeksirati tabelu:


CREATE INDEX Index_SifraPro
ON Artikli (Sifra);

Pratite Krstaricu i preko mobilne aplikacije za Android i iPhone.