Sobes.tech
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:

  1. 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.
  2. 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.
  3. Sortavimo nebuvimas: Indeksas jau surūšiuotas pagal indeksuotus stulpelius. Tai pašalina brangios rūšiavimo operacijos poreikį, jei užklausa reikalauja surūšiuotų rezultatų.
  4. 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);