SQL - CREATE INDEX Izjava


Šta je INDEX?

INDEX je struktura podataka pridružena tabeli koja omogućava brz pristup redovima u tabeli na temelju vrijednosti u jednoj ili više kolona (ključ index-sa). Recimo, imate tabelu kupaca u svojoj bazi podataka i želite saznati sve kupce čija imena počinju slovom A. Kako to da uradite? Koristite 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 redova, ali zamislite koliko bi vremena trebalo da odgovori na upit ako tabela sadrži milion redova. U takvoj situaciji možete ubrzati stvari primjenom index-sa na tabelu.



Kreiranje INDEX-sa

Možete stvoriti index-se pomoću izraza CREATE INDEX:

CREATE INDEX index_name ON table_name (column_name);

Na primjer, da biste kreirali index-s na koloni imena u tabeli kupaca, mogli biste koristiti sljedeći izraz:

CREATE INDEX cust_name_idx ON customers (cust_name);

Po defaultu, index-s će omogućiti dvostruke unose i sortirati unose u rastućem redosljedu. Da biste zahtijevali jedinstvene unose u index-s, 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 index-se na određenoj tabeli, ovako:

mysql> SHOW INDEXES FROM customers \G


Stvaranje index-sa sa više kolona

Takođe možete izgraditi index-se 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 index-s na obe kolone kako biste poboljšali performanse. Pogledajmo primjer:

CREATE INDEX user_name_idx ON users (first_name, last_name);


Loša strana index-sa

Index-s treba stvarati pažljivo, jer svaki put kada se red doda, ažurira ili ukloni iz tabele, svi index-si u toj tabeli moraju se izmijeniti. Zbog toga što više indeksa imate, to više posla treba poslužitelju, što dovodi do sporih performansi. Evo nekoliko osnovnih smjernica kojih se možete pridržavati prilikom kreiranja index-sa:

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

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



Drop Index

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

DROP INDEX index_name ON table_name;

Sljedeća izjava ispustiće index-s cust_name_idx iz tabele kupaca.

DROP INDEX cust_name_idx ON customers;

Ako ispustite tabelu, tada se ispuštaju i svi pridruženi index-si.