27.03. Indeksi u bazama podataka (MS SQL Server 2008)
Uvod
U radu sa bazama podataka često se susrećemo sa velikim količinama podataka. Zamislimo tabelu sa nekoliko hiljada ili miliona redova. Postavlja se pitanje: kako brzo pronaći traženi podatak?
Ako baza nema nikakav dodatni mehanizam za pretragu, sistem mora da pregleda svaki red – što može biti sporo. Upravo tu nastupaju indeksi.
Indeks u bazi podataka možemo zamisliti kao sadržaj knjige. Umesto da listamo celu knjigu da bismo pronašli određenu temu, pogledamo sadržaj i odmah znamo gde da tražimo.
1. Šta je indeks?
Indeks je struktura podataka koja omogućava brže pretraživanje i pristup podacima u tabeli.
-
Bez indeksa → pretraga ide redom (sporo)
-
Sa indeksom → koristi se optimizovana struktura (brzo)
Indeksi se najčešće prave nad kolonama koje se često koriste u: WHERE uslovima, JOIN operacijama, ORDER BY sortiranju, ...
2. Kako indeks funkcioniše
Zamislimo tabelu učenika:
| ID | Ime | Prezime |
|---|---|---|
| 1 | Marko | Marković |
| 2 | Ana | Petrović |
| 3 | Ivan | Jovanović |
Ako tražimo učenika sa prezimenom Petrović:
-
Bez indeksa: sistem proverava svaki red
-
Sa indeksom: sistem koristi "mapu" i odmah pronalazi podatak
3. Tipovi indeksa
U MS SQL Server-u najvažniji su:
1. Clustered indeks
-
Fizički sortira podatke u tabeli - > Tabela može imati samo jedan clustered indeks
2. Non-clustered indeks
-
Pravi posebnu strukturu (kao pokazivač) -> Može ih biti više
Dovoljno je razumeti da Clustered organizuje podatke, a Non-clustered pokazuje gde su podaci
4. Kreiranje indeksa
Sintaksa:
CREATE INDEX naziv_indeksa
ON naziv_tabele (kolona);
Primer:
CREATE INDEX idx_prezime
ON Ucenici (Prezime);
Ovim smo ubrzali pretragu po koloni Prezime.
5. Kreiranje unique indeksa
Ako želimo da sprečimo duplikate:
CREATE UNIQUE INDEX idx_email
ON Korisnici (Email);
Ovo znači:
-
Nema dva ista email-a
-
Istovremeno se ubrzava pretraga
6. Brisanje (odbacivanje) indeksa
Sintaksa:
DROP INDEX naziv_tabele.naziv_indeksa;
Primer:
DROP INDEX Ucenici.idx_prezime;
7. Kada koristiti indeks?
Indeks treba koristiti kada tabela ima mnogo podataka i često pretražujemo po određenoj koloni.
Ne treba ih koristiti kada tabela ima malo podataka ili se kolona se koristi ili često menjamo podatke (INSERT, UPDATE)
8. Prednosti i mane indeksa
Prednosti: Brža pretraga, Bolje performanse, ...
Mane: Zauzimaju dodatni prostor, Usporavaju unos i izmenu podataka, ...
Praktični deo (rad u MS SQL Server 2008)
Kreiranje tabele
CREATE TABLE Ucenici (
UcenikID INT PRIMARY KEY,
Ime NVARCHAR(50),
Prezime NVARCHAR(50),
Grad NVARCHAR(50)
);
Unos podataka
INSERT INTO Ucenici VALUES (1, 'Marko', 'Marković', 'Novi Sad');
INSERT INTO Ucenici VALUES (2, 'Ana', 'Petrović', 'Beograd');
INSERT INTO Ucenici VALUES (3, 'Ivan', 'Jovanović', 'Niš');
Dodavanje indeksa
CREATE INDEX idx_grad
ON Ucenici (Grad);
Zadaci za vežbu
Zadatak 1: Kreirati indeks nad kolonom Ime u tabeli Ucenici.
Zadatak 2: Kreirati unique indeks nad kolonom ID.
Zadatak 3: Obrisati indeks idx_grad.
Zadatak 4: Dodati kolonu Email i napraviti unique indeks nad njom.
********************
** uređivanje lekcije nije završeno **
********************