Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Hoe verschillen de kosten van I/O -bewerkingen tussen indexscans en tabelscans


Hoe verschillen de kosten van I/O -bewerkingen tussen indexscans en tabelscans


De kosten van I/O -bewerkingen tussen indexscans en tabelscans verschillen fundamenteel in termen van hoe gegevens worden toegankelijk, het aantal gelezen pagina's en de efficiëntie op basis van query -selectiviteit en gegevensorganisatie.

Indexscans omvatten toegang tot gegevens door een indexstructuur te doorkruisen (vaak een B-boom). De kosten hier omvatten voornamelijk twee componenten: de kosten voor toegang tot indexpagina's en de kosten voor het ophalen van de bijbehorende tabelpagina's. De indexpagina's hebben over het algemeen willekeurige toegangspatronen omdat indexbladknooppunten mogelijk niet fysiek aaneengesloten zijn op schijf, wat leidt tot willekeurige I/O -bewerkingen. Elke logische stap omlaag de indexstructuur van de wortel naar het blad vereist leespagina's, en deze kosten worden geschat met behulp van de willekeurige paginakostenparameter van het systeem. Na het vinden van de indexitems voor de relevante rijen haalt het systeem overeenkomstige tabelgegevenspagina's op. Het aantal van dergelijke gegevenspagina's hangt af van de selectiviteit van de query en de fysieke correlatie tussen opgeslagen gegevens en de indexvolgorde (bekend als correlatie). Een hoge correlatie betekent dat indexvermeldingen rijlocaties nauw overeenkomen met de volgorde van de fysieke gegevens, het verminderen van de willekeurige I/O en de indexscan efficiënter maken. Aan de andere kant leidt een lage correlatie tot veel willekeurige ophaalingen, waardoor de I/O -kosten aanzienlijk worden verhoogd.

De CPU -kosten in indexscans omvatten het verwerken van elke individuele rij die wordt opgehaald, maar de belangrijkste kosten is I/O. Er is ook het aspect van zichtbaarheid: als de database een zichtbaarheidskaartvolgt heeft welke datapagina's volledig zichtbaar zijn voor alle transacties, kan het systeem soms het lezen van bepaalde pagina's tijdens alleen indexscans volledig overslaan, waardoor de I/O-kosten drastisch worden verminderd.

Tabelscans of volledige tabel -scans werken daarentegen door alle gegevenspagina's opeenvolgend uit de tabel te lezen. De I/O hier is meestal sequentieel, die de neiging heeft sneller te zijn dan willekeurige I/O op draaiende schijven of minder bestraft op SSD's. De kosten van een volledige tabelscan zijn relatief constant omdat deze de hele tabel leest, ongeacht het aantal rijen dat aan de query voldoet. Deze kosten zijn afhankelijk van het totale aantal pagina's in de tabel in plaats van het aantal geselecteerde rijen. Volledige tabelscans profiteren niet van selectiviteit; Ze moeten elke pagina lezen, zelfs als de query de rijen zwaar in de buurt van de rijen filtert. Met moderne opslagtechnologieën en optimalisaties zoals multi-block-lezingen, parallelle lezingen en opslaglaag, kunnen de kosten van volledige tafelscans concurrerend zijn of zelfs minder dan indexscans voor vragen die een aanzienlijk deel van de tabel ophalen.

De kostengebaseerde Optimizer (CBO) besluit tussen het gebruik van een indexscan en een volledige tabelscan op basis van geschatte kosten. Voor zeer selectieve vragen waar slechts slechts een kleine fractie rijen opgehaald in indexscans door de neiging om lagere I/O -kosten te hebben, omdat er minder tabelpagina's zijn opgehaald. Naarmate de selectiviteitsdrempel toeneemt (meer rijen benodigd), stijgen de I/O -kosten van indexscans door een hoger aantal willekeurige paginapetsen en index -traversals, wat uiteindelijk de kosten van een volledige tabelscan overtreft. Op dit punt is de CBO voorstander van een tabelscan omdat de sequentiële I/O -kosten lager zijn dan de willekeurige I/O -last van veel index -lookups.

Een andere belangrijke factor die het I/O -kostenverschil beïnvloedt, is de "clusteringsfactor" of de fysieke clustering van rijen die overeenkomen met indextoetsen. Een lagere clusteringsfactor (betere clustering) betekent dat rijen die via de index zijn toegankelijk bevindt, zich fysiek nabij elkaar in de buurt van elkaar bevinden, waardoor willekeurige I/O wordt verminderd en de efficiëntie van de indexscan wordt verbeterd. Een hogere clusteringsfactor leidt tot meer willekeurige I/O tijdens de indexscan en vermindert het voordeel in vergelijking met een tafelscan.

Moderne databasesystemen kunnen ook parallelle scans implementeren, zowel index- als volledige tafelscans, waarbij I/O- en CPU -bronnen worden gedeeld met meerdere werknemers, wat de totale querytijd kan verminderen. Het fundamentele karakter van I/O voor indexscans (willekeurige paginaloegang) versus tabelscans (meestal sequentiële paginatoegang) blijft echter een belangrijke onderscheidende factor.

Om de belangrijkste punten over I/O -kostenverschillen samen te vatten:

- Index -scans maken I/O -kosten van leesindexpagina's (willekeurige toegang) plus het ophalen van overeenkomstige datapagina's (mogelijk willekeurige toegang). De kosten zijn gevoelig voor selectiviteit, correlatie en clusteringsfactor.
- Volledige tabel -scans voeren opeenvolgende I/O -lezen alle pagina's uit, met een relatief stabiele I/O -kosten, ongeacht de selectiviteit.
- Index -scans kunnen beter presteren wanneer query's gericht zijn op kleine subsets van gegevens, maar lijden aan willekeurige I/O -overhead naarmate selectiviteit stijgt.
- Volledige tabelscans kunnen efficiënter zijn wanneer een grote fractie van de tabel toegang nodig heeft vanwege efficiënte sequentiële I/O.
- Zichtbaarheidskaarten en alleen indexscans kunnen de I/O-kosten in sommige indexscangevallen verlagen door lezingen voor gegevenspagina's te vermijden.
- Parallellisme kan beide scantypen verbeteren, maar verandert geen fundamentele I/O -kenmerken.
- De optimizer balanceert deze kostenfactoren om de meest efficiënte methode te kiezen op basis van query- en gegevenskenmerken.

Deze verklaring legt de genuanceerde kostenverschillen vast in I/O -bewerkingen tussen indexscans en tabelscans zoals begrepen in moderne relationele databasesystemen.