Die Kosten für E/A -Operationen zwischen Index -Scans und Tabellen -Scans unterscheiden sich grundlegend in Bezug auf die Zugriff auf Daten, die Anzahl der gelesenen Seiten und die Effizienz basierend auf der Abfrageselektivität und der Datenorganisation.
Indexscans umfasst den Zugriff auf Daten, indem eine Indexstruktur (häufig ein B-Tree) durchquert wird. Die Kosten hier umfassen hauptsächlich zwei Komponenten: die Kosten für den Zugriff auf Indexseiten und die Kosten für das Abholen der entsprechenden Tabellenseiten. Die Indexseiten haben im Allgemeinen zufällige Zugriffsmuster, da Indexblattknoten auf der Festplatte möglicherweise nicht physikalisch zusammenhängen, was zu zufälligen E/A -Operationen führt. Jeder logische Schritt in den Indexbaum von der Wurzel zum Blatt erfordert Leseseiten, und diese Kosten werden unter Verwendung des zufälligen Parameters des Systems der zufälligen Seite geschätzt. Nach dem Auffinden der Indexeinträge für die relevanten Zeilen holt das System die entsprechenden Tabellendatenseiten ab. Die Anzahl solcher Datenseite abgeholt hängt von der Selektivität der Abfrage und der physikalischen Korrelation zwischen den gespeicherten Daten und der Indexreihenfolge (bekannt als Korrelation) ab. Eine hohe Korrelation bedeutet, dass Indexeinträge Zeilenpositionen in engem physischer Datenreihenfolge entsprechen, die die zufällige E/A reduziert und den Indexscan effizienter gestaltet. Andererseits führt eine niedrige Korrelation zu vielen zufälligen Abrufen, was die E/A -Kosten erheblich erhöht.
Die CPU -Kosten in Indexscans beinhalten die Verarbeitung der einzelnen Zeile, die abgerufen wurden. Die Hauptkostenanliegen sind jedoch E/A. Es gibt auch den Aspekt der Sichtbarkeit: Wenn die Datenbank über eine Sichtbarkeitskartenverfolgung verfügt, welche Datenseiten für alle Transaktionen vollständig sichtbar sind, kann das System manchmal während des Nur-Index-Scans das Lesen bestimmter Seiten vollständig überspringen, wodurch die E/A-Kosten drastisch reduziert werden.
Im Gegensatz dazu wird die Tabellen -Scans oder die vollständige Tabellen -Scans betrieben, indem alle Datenseiten nacheinander aus der Tabelle gelesen werden. Das E/A hier ist meist sequentiell, was dazu neigt, schneller als zufällig auf Spinnscheiben oder weniger bestraft auf SSDs zu bestrafen. Die Kosten eines vollständigen Tabellenscans sind relativ konstant, da die gesamte Tabelle unabhängig von der Anzahl der Zeilen liest, die die Abfrage erfüllen. Diese Kosten hängen eher von der Gesamtzahl der Seiten in der Tabelle als von der Anzahl der ausgewählten Zeilen ab. Vollständige Tabellen -Scans profitieren nicht von der Selektivität. Sie müssen jede Seite lesen, auch wenn die Abfrage die Reihen stark filtert. Mit modernen Speichertechnologien und Optimierungen wie Multi-Block-Lesevorgängen, parallelen Lesevorgängen und Speicherschichten können die Kosten für vollständige Tabellen-Scans jedoch wettbewerbsfähig oder sogar weniger als Index-Scans für Abfragen sein, die einen erheblichen Teil der Tabelle abrufen.
Der cost-basierte Optimierer (CBO) entscheidet zwischen der Verwendung eines Indexscans und einem vollständigen Tabellen-Scan basierend auf geschätzten Kosten. Bei hochselektiven Abfragen, bei denen nur ein kleiner Teil der Zeilen abgerufen werden muss, haben Index -Scans tendenziell niedrigere E/A -Kosten, da weniger Tabellenseiten abgerufen werden. Mit zunehmender Selektivitätsschwelle (weitere Zeilen erforderlich), steigt die E/A -Kosten für Indexscans aufgrund einer höheren Anzahl von Zufallsseiten -Abrufen und Index -Traverals, wodurch die Kosten eines vollständigen Tabellenscans schließlich übertrifft. Zu diesem Zeitpunkt bevorzugt der CBO einen Tabellenscan, da die sequentiellen E/A -Kosten geringer sind als die zufällige E/A -Belastung vieler Index -Lookups.
Ein weiterer wichtiger Faktor, der sich auf die I/A -Kostendifferenz auswirkt, ist der "Clustering -Faktor" oder das physische Clustering von Zeilen, die den Indexschlüssel entsprechen. Ein niedrigerer Clustering -Faktor (besseres Clustering) bedeutet, dass die über den Index zugegriffenen Zeilen physisch in der Nähe voneinander liegen, wodurch die zufälligen E/A -Effizienz reduziert wird. Ein höherer Clustering -Faktor führt zu mehr zufälligen E/A während des Indexscans und verringert seinen Nutzen im Vergleich zu einem Tabellen -Scan.
Moderne Datenbanksysteme können auch parallele Scans sowohl den Index- als auch die vollständigen Tabellen -Scans implementieren, wobei I/A- und CPU -Ressourcen an mehreren Arbeitnehmern gemeinsam genutzt werden, wodurch die Gesamtabfragezeit verkürzt werden kann. Die grundlegende Natur von E/A für Indexscans (zufälliger Seitenzugriff) gegen Tabellen -Scans (meist sequentielle Seitenzugriff) bleibt jedoch ein Schlüsselunterschied.
Um wichtige Punkte zu I/A -Kostenunterschieden zusammenzufassen:
- Index -Scans entstehen E/A -Kosten aus Leseindexseiten (Zufallszugriff) plus entsprechende Datenseiten (potenziell zufälliger Zugriff). Die Kosten sind empfindlich gegenüber Selektivität, Korrelation und Clusterfaktor.
- Vollständige Tabellen -Scans führen sequentielle E/A -Lesen aller Seiten mit relativ stabilen E/A -Kosten unabhängig von der Selektivität aus.
- Indexscans können übertreffen, wenn Abfragen kleine Datenabteilungen abzielen, aber unter steigern Selektivität unter zufälligem E/A -Overhead leiden.
- Vollständige Tabellen -Scans können effizienter sein, wenn ein großer Teil der Tabelle aufgrund effizienter sequentieller E/A Zugriff benötigt.
- Sichtbarkeitskarten und Nur-Index-Scans können in einigen Index-Scan-Fällen die E/A-Kosten senken, indem Datenseite vermieden werden.
- Parallelität kann beide Scan -Typen verbessern, verändert jedoch die grundlegenden E/A -Eigenschaften nicht.
- Der Optimierer gleicht diese Kostenfaktoren aus, um die effizienteste Methode basierend auf Abfrage- und Dateneigenschaften auszuwählen.