Indeks pomaže SQL Serveru da brzo dohvati podatke iz redaka. Indeksi funkcioniraju poput sadržaja na početku knjiga, omogućujući vam da brzo potražite stranicu na kojoj se tema nalazi. Bez indeksa, SQL Server mora skenirati sve retke u tablici kako bi pronašao zapis.
Postoje dvije vrste indeksa u SQL Serveru: grupirani i negrupisani. Saznajte razliku između klasteriranih i neklasteriranih indeksa i zašto su važni.
Grupirani indeks u SQL Serveru
U klasteriranom indeksu, redovi podataka su fizički pohranjeni na uređen način na temelju vrijednosti ključa. Budući da indeks uključuje tablicu i može poredati retke samo jednim redoslijedom, možete stvoriti samo jedan klasterirani indeks po tablici.
Dok indeksi ubrzavaju dohvaćanje redaka u rasponu, INSERT i UPDATE izjave može biti spor jer optimizator upita redom skenira indeks dok ne pronađe ciljni indeks.
Neklasterirani indeks u SQL Serveru
Neklasterizirani indeks sadrži ključne vrijednosti čiji je unos pokazivač koji se naziva lokator retka. Za klasterirane tablice (tablice s klasteriranim indeksom), pokazivač pokazuje na ključ u klasteriranom indeksu koji pak pokazuje na redak u tablici. Za retke bez grupiranog indeksa, pokazivač pokazuje izravno na red tablice.
Kako stvoriti klasterirani indeks u SQL Serveru
Kada kreirate tablicu s primarnim ključem, SQL Server automatski stvara klasterirani indeksni ključ na temelju tog primarnog ključa. Ako nemate primarni ključ, možete izvršiti sljedeću naredbu da biste stvorili klasterirani indeksni ključ.
STVORITI GRUPASTI INDEKS <indeksIme>
NA STOLU <naziv_tablice>(naziv_stupca)
U ovoj izjavi navodite naziv indeksa, naziv tablice u kojoj ćete ga kreirati i naziv stupca koji ćete koristiti u indeksu.
Ako dodate primarni ključ u tablicu koja već ima klasterirani indeks, SQL Server će s njim stvoriti neklasterirani indeks.
Da biste stvorili klasterirani indeks koji ne uključuje stupac primarnog ključa, prvo morate odbaciti ograničenje primarnog ključa.
KORISTITInaziv_baze podataka
PROMIJENISTOL naziv_tablice
PADOGRANIČENJE pk_name
IĆI
Uklanjanje ograničenja primarnog ključa također uklanja klasterirani indeks što vam omogućuje stvaranje prilagođenog.
Kako stvoriti neklasterirani indeks u SQL Serveru
Za kreiranje neklasteriziranog indeksa koristite sljedeću izjavu.
STVORITIINDEKS <indeksIme>
NA STOLU <naziv_tablice>(naziv_stupca)
Također možete koristiti ključnu riječ NONCLUSTERED ovako:
STVORITI [NESKLASTERIRANO] INDEKS <indeksIme>
NA STOLU <naziv_tablice>(naziv_stupca)
Ova izjava stvara neklasterirani indeks u tablici koju navedete i uključuje stupac koji navedete.
Ako želite, možete poredati stupce uzlaznim (ASC) ili silaznim (DESC) redoslijedom.
STVORITI [NESKLASTERIRANO] INDEKS <indeksIme>
NA STOLU <naziv_tablice>(naziv_stupca ASC/DESC)
Koji indeks odabrati?
I klasterirani i neklasterirani indeksi poboljšavaju vrijeme postavljanja upita. Ako su većina vaših upita SELECT operacije na nekoliko stupaca u tablici, klasterirani indeksi su brži. Međutim, za operacije INSERT ili UPDATE, neklasterizirani indeksi su brži budući da optimizator upita može locirati stupac izravno iz indeksa.
Kao što vidite, ovi indeksi najbolje funkcioniraju za različite SQL upite. Većina SQL baza podataka stoga će imati koristi od barem jednog klasteriranog indeksa i neklasteriranih indeksa za stupce koji se redovito ažuriraju.
Važnost indeksa u SQL Serveru
Klasterirani i neklasterirani indeksi dovode do bolje izvedbe upita. Kada pokrenete upit, alat za optimizaciju upita skenira indeks radi lokacije pohrane retka i zatim dohvaća informacije s te lokacije. Ovo je puno brže od skeniranja svih redaka u tablici.
Također možete koristiti neklasterizirane indekse za rješavanje zastoja traženja oznaka stvaranjem neklasteriziranog indeksa za stupce kojima upiti pristupaju.