Middle
Kako indeks optimizuje izvršenje upita?
sobes.tech АИ
Одговор од АИ
Indeks je struktura podataka (obično B-stablo) koja čuva mali deo podataka tabele i linkove do odgovarajućih redova u glavnoj tabeli.
Proces optimizacije:
- Brza pretraga: Umesto potpunog skeniranja cele tabele (full table scan), sistem za upravljanje bazama podataka (DBMS) pretražuje indeks. Indeks je sortirani i optimizovani za brzu pretragu po određenim kolonama.
- Smanjenje obima čitanih podataka: Indeks sadrži samo indeksirane kolone i pokazivače, što značajno smanjuje količinu podataka koje je potrebno pročitati sa diska u poređenju sa čitanjem cele reda ili cele stranice podataka.
- Nema sortiranja: Indeks je već sortirani po indeksiranim kolonama. To eliminiše potrebu za izvođenjem skupog operacije sortiranja ako zahtev za upitom traži sortirani rezultat.
- Optimizacija JOIN operacija: Pri spajanju tabela (JOIN) po indeksiranim kolonama, DBMS može koristiti indeks za brzo pronalaženje odgovarajućih redova u drugoj tabeli, umesto izvođenja ugnježdenih petlji kroz celu tabelu.
Primer:
Bez indeksa na koloni LastName za upit SELECT * FROM Users WHERE LastName = 'Ivanov', DBMS bi morao da pročita svaki red u tabeli Users i proveri vrednost LastName.
Sa indeksom na LastName, DBMS brzo pronalazi zapise gde je LastName jednak 'Ivanov', pretražujući sortirani indeks, a zatim koristi pokazivače iz indeksa da dobije potpune podatke redova iz glavne tabele.
-- Primer upita koji koristi indeks na LastName
SELECT UserId, FirstName
FROM Users
WHERE LastName = 'Ivanov';
-- Primer kreiranja indeksa za optimizaciju gore navedenog upita
CREATE INDEX IX_Users_LastName ON Users (LastName);