SQL - CREATE INDEX Izjava


Šta je INDEX?

INDEX je struktura podataka pridružena tabeli koja omogućuje brzi pristup redovima u tabeli na temelju vrijednosti u jednoj ili više kolona (ključ indeksa). Recimo, imate tabelu kupaca u svojoj bazi podataka i želite saznati sve kupce čija imena počinju slovom A, koristeći sljedeću izjavu.

SELECT cust_id, cust_name, address FROM customers 
WHERE cust_name LIKE 'A%';

Da biste pronašli takve kupce, poslužitelj mora skenirati svaki red jedan po jedan u tabeli kupaca i pregledati sadržaj kolone imena. Iako to dobro funkcioniše za tabelu s nekoliko redaova, ali zamislite koliko bi vremena trebalo da odgovori na upit ako tabela sadrži milion redova. U takvoj situaciji možete ubrzati stvari primjenom indeksa na tabelu.



Kreiranje INDEX-sa

Možete stvoriti indekse pomoću izraza CREATE INDEX:

CREATE INDEX index_name ON table_name (column_name);

Na primjer, da biste kreirali indeks na koloni imena u tabeli kupaca, mogli biste koristiti:

CREATE INDEX cust_name_idx ON customers (cust_name);

Po defaultu, indeks će omogućiti dvostruke unose i sortirati unose u rastućem redoslijedu. Da biste zahtijevali jedinstvene unose u indeks, dodajte ključnu riječ UNIQUE nakon CREATE, ovako:

CREATE UNIQUE INDEX cust_name_idx 
ON customers (cust_name);

U MySQL-u možete pogledati dostupne indekse na određenoj tabeli, ovako:

mysql> SHOW INDEXES FROM customers \G


Stvaranje indeksa sa više kolona

Takođe možete izgraditi indekse koji se protežu na više kolona. Na primjer, pretpostavimo da u vašoj bazi podataka imate tabelu s imenom korisnika koji imaju kolonu first_name i last_name i često pristupate korisničkim zapisima pomoću ovih kolona, a zatim možete zajedno graditi indeks na obe kolone kako biste poboljšali performanse. Pogledajmo primjer:

CREATE INDEX user_name_idx ON users (first_name, last_name);


Loša strana indeksa

Indeks treba stvarati pažljivo. Jer, svaki put kada se red doda, ažurira ili ukloni iz tabele, svi indeksi u toj tabeli moraju se izmijeniti. Stoga, što više indeksa imate, to više posla treba poslužitelju, što napokon dovodi do sporih performansi. Evo nekoliko osnovnih smjernica kojih se možete pridržavati prilikom kreiranja indeksa:

  • Indeksirajte kolone koje često koristite za dohvatanje podataka.
  • Ne stvarajte indekse za kolone koje nikada ne koristite kao ključeve za dohvatanje.
  • Redovi indeksa koji se koriste za spajanja radi poboljšanja performansi spajanja.
  • Izbjegavajte kolone koji sadrže previše NULL vrijednosti.

Takođe malim tabelama nisu potrebni indeksi, jer je u slučaju malih tabela obično ide brže da poslužitelj skenira tabelu, umjesto da prvo pogleda indeks.



Drop Indexes

Sa sljedećom izjavom možete ispustiti indekse koji više nisu potrebni.

DROP INDEX index_name ON table_name;

Sljedeća izjava ispustit će indeks cust_name_idx iz tabele kupaca.

DROP INDEX cust_name_idx ON customers;

Ako ispustite tablicu, tada se ispuštaju i svi pridruženi indeksi.