Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.0 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Abfragen optimieren und ausführen » Algorithmen zur Abfrageausführung » Tabellen-Zugriffsmethoden

 

TableScan-Methode (seq)

Die TableScan-Methode liest sämtliche Zeilen aller Seiten einer Tabelle in der Reihenfolge, in der sie in der Datenbank gespeichert sind. Dies wird ein sequenzieller Table-Scan genannt.

Sequenzielle Table-Scans werden im kurzen und im ausführlichen Textplan als Korrelationsname<seq> dargestellt. Dabei gilt, dass Korrelationsname der in der FROM-Klausel angegebene Korrelationsname bzw., wenn keiner angegeben wurde, der Tabellenname ist.

Sequenzielle Table-Scans werden verwendet, wenn zu erwarten ist, dass die meisten Tabellenseiten eine Zeile enthalten, die die Suchbedingung der Abfrage erfüllt bzw. kein geeigneter Index definiert ist.

Obwohl sequenzielle Table-Scans eventuell mehr Seiten lesen als Index-Scans, kann es sein, dass die I/O-Vorgänge deutlich kostengünstiger sind, da die Seiten in zusammenhängenden Blöcken von der Festplatte gelesen werden (eine optimale Verbesserung der Performance wird erreicht, wenn die Datenbankdatei auf der Festplatte nicht fragmentiert ist). Sequenzielle I/O-Vorgänge minimieren die Bewegungen des Lesekopfs der Festplatte und die Speicherplattenzugriffszeit. Bei großen Tabellen lesen sequenzielle Table-Scans auch Gruppen aus mehreren Seiten gleichzeitig. Dadurch werden die Kosten für sequenzielle Table-Scans im Vergleich zu Index-Scans noch weiter reduziert.

Obwohl sequenzielle Table-Scans eventuell weniger Zeit benötigen als Index-Scans, die viele Zeilen miteinander vergleichen, können sie jedoch den Cache nicht so effizient nutzen wie Index-Scans, wenn die Suche mehrere Male ausgeführt wird. Da Index-Scans voraussichtlich auf weniger Tabellenseiten zugreifen, ist es wahrscheinlicher, dass die Seiten im Cache zur Verfügung stehen, woraus sich ein schnellerer Zugriff ergibt. Daher ist es viel besser, für wiederholte Tabellenzugriffe, wie z.B. auf der rechten Seite eines Nested-Loops-Joins einen Index-Scan zu verwenden.

Für Transaktionen auf Isolationsstufe 3 setzt SQL Anywhere eine Sperre für jede Zeile, auf die zugegriffen wird, selbst wenn sie die Suchbedingung nicht erfüllt. Auf dieser Isolationsstufe setzen sequenzielle Table-Scans Sperren für alle Zeilen in der Tabelle, während Index-Scans lediglich Sperren für die Zeilen setzen, die der Suchbedingung entsprechen. Das bedeutet, dass sequenzielle Table-Scans den Durchsatz in einer Mehrbenutzerumgebung deutlich reduzieren können. Aus diesem Grunde gibt der Optimierer bei Isolationsstufe 3 indizierten Zugriffen ausdrücklich den Vorrang gegenüber sequenziellen Zugriffen. Sequenzielle Scans können einfache Vergleichsprädikate zwischen Tabellenspalten und Konstanten während des Scans effizient bewerten. Andere Suchbedingungen, die sich nur auf die im Scan-Vorgang befindliche Tabelle beziehen, werden nach diesen einfachen Vergleichen bewertet. Dieser Ansatz ist etwas effizienter als die Auswertung der Bedingungen nach dem sequenziellen Scan in einem Filter.