Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Hvordan skiller kostnadene for I/O -operasjoner seg mellom indeksskanninger og tabellskanninger


Hvordan skiller kostnadene for I/O -operasjoner seg mellom indeksskanninger og tabellskanninger


Kostnadene for I/O -operasjoner mellom indeksskanninger og tabellskanninger skiller seg fundamentalt når det gjelder hvordan data får tilgang til, antall sider som leses og effektiviteten basert på selektivitet og dataorganisasjon.

Indeksskanninger innebærer tilgang til data ved å krysse en indeksstruktur (ofte et B-tre). Kostnaden her inkluderer først og fremst to komponenter: kostnadene for å få tilgang til indekssider og kostnadene for å hente de tilsvarende bordsidene. Indekssidene har generelt tilfeldige tilgangsmønstre fordi indeksbladnoder kanskje ikke er fysisk sammenhengende på disken, noe som fører til tilfeldige I/O -operasjoner. Hvert logisk trinn ned indekstreet fra roten til bladet krever lesesider, og denne kostnaden er estimert ved å bruke systemets tilfeldige sidekostnadsparameter. Etter å ha lokalisert indeksoppføringene for de aktuelle radene, henter systemet tilsvarende tabelldatasider. Antallet slike dataside henter avhenger av spørringens selektivitet og den fysiske korrelasjonen mellom lagret data og indeksordren (kjent som korrelasjon). En høy korrelasjon betyr indeksoppføringer ROW -lokasjoner samsvarer med fysisk datastyring, reduserer den tilfeldige I/O og gjør indeksskanningen mer effektiv. På den annen side fører en lav korrelasjon til mange tilfeldige henter, noe som øker I/O -kostnadene betydelig.

CPU -kostnadene i indeksskanninger inkluderer behandling av hver enkelt rad hentet, men hovedkostnadsproblemet er I/O. Det er også aspektet av synlighet: Hvis databasen har et synlighetskartsporing hvilke datasider som er fullt synlig for alle transaksjoner, kan systemet noen ganger hoppe over å lese visse sider under bare indeksskanninger, noe som reduserer I/O-kostnadene drastisk.

I kontrast fungerer tabellskanninger eller full tabellskanninger ved å lese alle datasider sekvensielt fra tabellen. I/O her er stort sett sekvensiell, som har en tendens til å være raskere enn tilfeldig I/O på spinnende disker eller mindre straffet på SSD -er. Kostnaden for en full tabellskanning er relativt konstant fordi den leser hele tabellen uavhengig av antall rader som tilfredsstiller spørringen. Denne kostnaden avhenger av det totale antall sider i tabellen i stedet for antall valgte rader. Full tabellskanninger drar ikke fordel av selektivitet; De må lese hver side selv om spørringen filtrerer ned i radene. Imidlertid, med moderne lagringsteknologier og optimaliseringer som multi-block-avlesninger, parallelle avlesninger og lagringslagsavlasting, kan kostnadene for full tabellskanninger være konkurransedyktige eller til og med mindre enn indeksskanninger for spørsmål som henter en betydelig del av tabellen.

Den kostnadsbaserte Optimizer (CBO) bestemmer seg for å bruke en indeksskanning og en full tabellskanning basert på estimerte kostnader. For svært selektive spørsmål der bare en liten brøkdel av rader må hentes indeksskanninger har en tendens til å ha lavere I/O -kostnader fordi færre bordsider hentes. Når selektivitetsterskelen øker (flere rader som trengs), øker I/O -kostnadene for indeksskanninger på grunn av et høyere antall tilfeldige sidehenter og indekstraversals, og til slutt overgår kostnadene for en full tabellskanning. På dette tidspunktet favoriserer CBO en tabellskanning fordi den sekvensielle I/O -kostnaden er mindre enn den tilfeldige I/O -belastningen for mange indeksoppslag.

En annen viktig faktor som påvirker I/O -kostnadsforskjellen er "grupperingsfaktoren" eller den fysiske gruppering av rader som tilsvarer indekstastene. En lavere klyngefaktor (bedre klynging) betyr at rader som er tilgjengelig via indeksen er lokalisert i nærheten av hverandre fysisk, reduserer tilfeldig I/O og forbedrer indeksskanningseffektiviteten. En høyere grupperingsfaktor fører til mer tilfeldig I/O under indeksskanning og reduserer fordelen sammenlignet med en tabellskanning.

Moderne databasesystemer kan også implementere parallelle skanninger både indeks og full tabellskanninger der I/O- og CPU -ressurser deles mellom flere arbeidere, noe som kan redusere total spørringstid. Imidlertid er den grunnleggende karakteren av I/O for indeksskanninger (tilfeldig sidetilgang) kontra tabellskanninger (for det meste sekvensiell sidetilgang) fortsatt en viktig differensierer.

For å oppsummere viktige punkter om I/O -kostnadsforskjeller:

- Indeksskanninger pådrar seg I/O -kostnader fra å lese indekssider (tilfeldig tilgang) pluss å hente tilsvarende datasider (potensielt tilfeldig tilgang). Kostnaden er følsom for selektivitet, korrelasjon og klyngefaktor.
- Full tabellskanninger utfører sekvensielle I/O -lesing av alle sider, med en relativt stabil I/O -kostnad uavhengig av selektivitet.
- Indeksskanninger kan utkonkurrere når spørsmål er rettet mot små undergrupper av data, men lider av tilfeldig I/O -overhead når selektiviteten øker.
- Full bordskanninger kan være mer effektive når en stor brøkdel av tabellen trenger tilgang på grunn av effektiv sekvensiell I/O.
- Synlighetskart og bare indeksskanninger kan redusere I/O-kostnadene i noen indeksskanningssaker ved å unngå datasidesavlesninger.
- Parallellisme kan forbedre begge skanningstypene, men endrer ikke grunnleggende I/O -egenskaper.
- Optimaliseren balanserer disse kostnadsfaktorene for å velge den mest effektive metoden basert på spørring og datakarakteristikker.

Denne forklaringen fanger de nyanserte kostnadsforskjellene i I/O -operasjoner mellom indeksskanninger og tabellskanninger som forstått i moderne relasjonsdatabasesystemer.