I/O operacijų tarp indekso nuskaitymų ir lentelių nuskaitymo išlaidos iš esmės skiriasi atsižvelgiant į tai, kaip galima pasiekti duomenis, skaitomų puslapių skaičių ir efektyvumą, pagrįstą užklausų selektyvumu ir duomenų organizavimu.
Rodyklės nuskaitymai apima prieigą prie duomenų, einančių į rodyklės struktūrą (dažnai B medį). Išlaidą čia pirmiausia apima du komponentai: indekso puslapių prieigos kaina ir atitinkamų lentelės puslapių gavimo išlaidos. Rodyklės puslapiuose paprastai yra atsitiktinių prieigos modelių, nes rodyklės lapų mazgai gali būti ne fiziškai gretimi diske, todėl atsitiktinės I/O operacijos. Kiekvienam loginiam žingsniui žemyn rodyklės medžio nuo šaknies iki lapo reikia skaitymo puslapių, o šios išlaidos įvertinamos naudojant sistemos atsitiktinio puslapio kainos parametrą. Nustatydama atitinkamų eilučių rodyklės įrašus, sistema pateikia atitinkamus lentelės duomenų puslapius. Tokio duomenų puslapio skaičius priklauso nuo užklausos selektyvumo ir fizinės koreliacijos tarp saugomų duomenų ir indekso tvarkos (žinomos kaip koreliacija). Aukšta koreliacija reiškia, kad rodyklės įrašai eilutės vietos tiksliai atitinka fizinių duomenų tvarką, sumažinant atsitiktinį I/O ir padidinant rodyklės nuskaitymą. Kita vertus, maža koreliacija lemia daugybę atsitiktinių atvejų, todėl I/O kainuoja žymiai.
CPU išlaidos indekso nuskaitymuose apima kiekvienos atskiros gautos eilutės apdorojimą, tačiau pagrindinė problema yra I/O. Taip pat yra matomumo aspektas: jei duomenų bazėje yra matomumo žemėlapio stebėjimas, kurie duomenų puslapiai yra visiškai matomi visoms operacijoms, sistema kartais gali visiškai praleisti skaitymo tam tikrus puslapius tik indekso nuskaitymo metu, drastiškai sumažindama I/O išlaidas.
Priešingai, lentelės nuskaitymai arba visos lentelės nuskaitymai veikia skaitydami visus duomenų puslapius iš eilės iš lentelės. I/O čia dažniausiai yra nuosekli, kuri paprastai būna greitesnė nei atsitiktinis I/O ant verpimo diskų ar mažiau nubaustų SSD. Viso lentelės nuskaitymo kaina yra gana pastovi, nes ji nuskaito visą lentelę, neatsižvelgiant į eilučių, tenkinančių užklausą, skaičių. Šios išlaidos priklauso nuo bendro lentelės puslapių skaičiaus, o ne pasirinktų eilučių skaičiaus. Visas lentelės nuskaitymas nėra naudingas selektyvumui; Jie turi skaityti kiekvieną puslapį, net jei užklausa smarkiai filtruoja eilutes. Tačiau naudojant šiuolaikines saugojimo technologijas ir optimizavimus, tokius kaip daugialypės bloko skaitymai, lygiagrečiai skaitymai ir atminimo saugojimo sluoksnių iškrovimas, visos lentelės nuskaitymo kaina gali būti konkurencinga arba net mažesnė nei indekso nuskaitymai dėl užklausų, kurios gauna didelę lentelės dalį.
Išlaidomis pagrįstas optimizatorius (CBO) nusprendžia naudoti indekso nuskaitymą ir viso lentelės nuskaitymą, remiantis apskaičiuotomis išlaidomis. Dėl labai selektyvių užklausų, kai reikia nuskaityti tik nedidelę dalį eilučių, kurių indekso nuskaitymai paprastai turi mažesnes I/O išlaidas, nes yra mažiau lentelių puslapių. Didėjant selektyvumo slenksčiui (reikia daugiau eilučių), indekso nuskaitymų I/O išlaidos padidėja dėl didesnio atsitiktinių puslapių gavimo ir rodyklės perėjimų skaičiaus, galiausiai peržengdama visą lentelės nuskaitymo kainą. Šiuo metu CBO palaiko lentelės nuskaitymą, nes nuoseklios I/O išlaidos yra mažesnės nei atsitiktinė I/O našta iš daugelio indeksų paieškų.
Kitas svarbus veiksnys, darantis įtaką I/O išlaidų skirtumui, yra „klasterizacijos faktorius“ arba eilučių, atitinkančių rodyklės raktus, fizinį grupavimą. Mažesnis grupavimo koeficientas (geresnis grupavimas) reiškia, kad eilutės, pasiekiamos per rodyklę, yra fiziškai esančios šalia kitos, sumažinant atsitiktinį I/O ir pagerinant indekso nuskaitymo efektyvumą. Didesnis grupavimo koeficientas sukelia daugiau atsitiktinių I/O indekso nuskaitymo metu ir sumažina jo naudą, palyginti su lentelės nuskaitymu.
Šiuolaikinės duomenų bazių sistemos taip pat gali įdiegti lygiagrečius nuskaitymus ir indeksą, ir į visą lentelės nuskaitymą, kuriuose tarp kelių darbuotojų yra dalijamasi I/O ir CPU ištekliais, o tai gali sumažinti bendrą užklausos laiką. Tačiau pagrindinis diferencialas išlieka pagrindinis I/O indekso nuskaitymo (atsitiktinės puslapio prieigos), palyginti su lentelės nuskaitymais (dažniausiai nuoseklios puslapio prieiga), pobūdis.
Apibendrinant pagrindinius dalykus apie I/O išlaidų skirtumus:
- Rodyklės nuskaitymai patiria I/O išlaidas iš skaitymo rodyklės puslapių (atsitiktinės prieigos) ir atitinkamų duomenų puslapių (potencialiai atsitiktinės prieigos) gavimas (potencialiai atsitiktinė prieiga). Kaina yra jautri selektyvumui, koreliacijai ir klasterizacijos faktoriui.
- Visas lentelių nuskaitymas atlieka nuoseklų I/O skaitymą visus puslapius, kurių santykinai stabilios I/O kainuoja, neatsižvelgiant į selektyvumą.
- Rodyklės nuskaitymai gali būti pralenkiami, kai užklausos nukreiptos į mažus duomenų pogrupius, tačiau kenčia nuo atsitiktinės I/O pridėtinės vertės, kai didėja selektyvumas.
- Visas lentelės nuskaitymas gali būti efektyvesnis, kai didelei lentelės dalį reikia pasiekti dėl efektyvaus nuoseklaus I/O.
- Matomumo žemėlapiai ir tik indekso nuskaitymai gali sumažinti I/O išlaidas kai kuriuose indekso nuskaitymo atvejais, išvengiant duomenų puslapio.
- Paralelizmas gali pagerinti abu skenavimo tipus, tačiau nekeičia pagrindinių I/O charakteristikų.
- Optimizatorius subalansuoja šiuos išlaidų veiksnius, kad pasirinktų efektyviausią metodą, pagrįstą užklausa ir duomenų charakteristikomis.