Sobes.tech
Middle+

Kada visiško duomenų rinkinio nuskaitymas yra efektyvesnis nei prieiga per indeksą?

sobes.tech AI

Atsakymas iš AI

Kai procentas įrašų, kuriuos reikia apdoroti, yra pakankamai didelis (pavyzdžiui, daugiau nei 10-20%), kad indeksų paieškos ir atskirų duomenų blokų skaitymo išlaidos viršytų pranašumus.

Kiti atvejai:

  • Tinkamo indekso nebuvimas: Jei nėra indekso, kuris apimtų filtruojamus laukus arba suteiktų greitesnį prieigą prie duomenų nei pilnas nuskaitymas.
  • Duomenų pasiskirstymo nelygybė (skew): Jei indeksuotas laukas turi žemą kardinalumą ir didžioji duomenų dalis sutelkta keliuose reikšmėse, nuskaitymas gali būti greitesnis nei perėjimas per daugelį indekso lapų su tomis pačiomis reikšmėmis.
  • Mažas duomenų rinkinys: Mažose lentelėse indeksų palaikymo ir naudojimo išlaidos gali būti didesnės nei nauda.
  • Eiliškas skaitymas: Pilnas nuskaitymas dažnai apima eilišką skaitymą iš disko, kuris gali būti greitesnis nei atsitiktinis skaitymas per indeksą, ypač HDD.
  • Didelis duomenų kiekis vienoje eilutėje: Jei kiekviena eilutė turi daug duomenų, viso duomenų rinkinio skaitymas vienu metu gali būti efektyvesnis nei keli diskų prieigos bandymai gauti atskiras eilutes per indeksą.

Pavyzdys, kai pilnas nuskaitymas gali būti efektyvesnis:

// Paprastas SELECT * iš lentelės su mažai eilučių.
SELECT *
FROM small_table;

// Užklausa su filtru, kuris apima daugumą eilučių
SELECT *
FROM large_table
WHERE status = 'processed'; // Jei dauguma eilučių turi būseną 'processed'