Middle
Kaip indeksas optimizuoja užklausos vykdymą?
sobes.tech AI
Atsakymas iš AI
Indeksas yra duomenų struktūra (paprastai B-medžio), kuri saugo nedidelę dalį lentelės duomenų ir nuorodas į atitinkamas eilutes pagrindinėje lentelėje.
Optimizavimo procesas:
- Greita paieška: Vietoj visos lentelės nuskaitymo (full table scan), duomenų valdymo sistema (DBVS) peržiūri indeksą. Indeksas yra surūšiuotas ir optimizuotas greitam paieškai pagal tam tikrus stulpelius.
- Mažesnis nuskaitytų duomenų kiekis: Indeksas apima tik indeksuotus stulpelius ir nuorodas, kas žymiai sumažina duomenų kiekį, kurį reikia nuskaityti iš disko, lyginant su visos eilutės ar viso puslapio skaitymu.
- Sortavimo nebuvimas: Indeksas jau surūšiuotas pagal indeksuotus stulpelius. Tai pašalina brangios rūšiavimo operacijos poreikį, jei užklausa reikalauja surūšiuotų rezultatų.
- JOIN operacijų optimizavimas: Sujungiant lenteles (JOIN) pagal indeksuotus stulpelius, DBVS gali naudoti indeksą greitam atitinkančių eilučių radimui kitoje lentelėje, vietoj visos lentelės iteracijos.
Pavyzdys:
Be indekso pagal stulpelį LastName užklausai SELECT * FROM Users WHERE LastName = 'Иванов', DBVS turėtų nuskaityti kiekvieną eilutę lentelėje Users ir patikrinti LastName reikšmę.
Su indeksu pagal LastName, DBVS greitai suras įrašus, kur LastName yra lygus 'Иванов', peržiūrėdamas surūšiuotą indeksą, o tada naudosis indeksų nuorodomis, kad gautų pilnus eilutės duomenis iš pagrindinės lentelės.
-- Pavyzdys užklausos, kuri naudosis `LastName` indeksu
SELECT UserId, FirstName
FROM Users
WHERE LastName = 'Иванов';
-- Pavyzdys indeksui sukurti, siekiant optimizuoti aukščiau pateiktą užklausą
CREATE INDEX IX_Users_LastName ON Users (LastName);