Die IndexScan-Methode verwendet einen Index, um festzustellen, welche Zeilen eine Suchbedingung erfüllen. Index-Scans können die Menge von qualifizierten Zeilen verringern, bevor auf die Tabelle zugegriffen wird. Index-Scans geben auch Zeilen in einer sortierten Reihenfolge aus.
Die IndexScan-Methode erscheint im kurzen Plan als Korrelationsname<Indexname>
, wobei Korrelationsname der in der FROM-Klausel angegebene Korrelationsname bzw., falls keiner angegeben wurde, der Tabellenname ist, und Indexname der Name des Indices.
Indizes bieten ein effizientes Verfahren zum Lesen weniger Zeilen in einer großen Tabelle. Allerdings kann ein Index-Scan kostenträchtiger als ein sequenzieller Scan sein, wenn viele Zeilen aus einer Tabelle eingelesen werden sollen. Index-Scans bewirken, dass die Seiten in der Datenbank in zufälliger Reihenfolge gelesen werden, was viel kostenträchtiger ist als sequenzielle Lesevorgänge. Es kann auch vorkommen, dass Index-Scans dieselbe Tabellenseite mehrmals referenzieren, wenn mehrere Zeilen auf dieser Seite die Suchbedingung erfüllen. Wenn vom Index-Scan nur einige wenige entsprechende Seiten gefunden wurden, bleiben die Seiten wahrscheinlich im Cache, und mehrfacher Zugriff führt nicht zu zusätzlichen I/O-Vorgängen. Wenn jedoch viele Seiten der Suchbedingung entsprechen, passen diese eventuell nicht alle in den Cache. Das kann dann dazu führen, dass der Index-Scan dieselbe Seite mehrere Male von der Festplatte liest.
Der Optimierer verwendet einen Index-Scan, um eine Suchbedingung zu erfüllen, wenn die Suchbedingung "sargable" (d.h. mit einem Suchargument versehbar) und die Schätzung des Optimierers zur Selektivität der Suchbedingung niedrig genug ist, sodass der Index-Scan kostengünstiger wird als ein sequenzieller Table-Scan.
Ein Index-Scan kann auch "nicht-sargable" Suchbedingungen berücksichtigen, nachdem die Zeilen aus dem Index geholt wurden. Die Auswertung von Bedingungen während eines Index-Scans ist etwas effizienter als eine Auswertung nach dem Index-Scan in einem Filter.
Auch wenn keine Suchbedingungen erfüllt werden müssen, können mit Indizes Sortierreihenfolgen-Anforderungen erfüllt werden, die entweder explizit in einer ORDER BY-Klausel definiert oder implizit für eine GROUP BY- oder DISTINCT-Klausel benötigt werden. Die Verfahren "Ordered-Group-by" und "Ordered-Distinct" können die ersten Zeilen schneller zurückgeben als Hash-basierte "grouping"- und "distinct"-Verfahren. Es kann jedoch sein, dass die Rückgabe der gesamten Ergebnismenge länger dauert.
Der Optimierer bevorzugt meist Index-Scans anstelle von sequenziellen Table-Scans, wenn "optimization_goal" auf "erste Zeile" gesetzt ist. Das liegt daran, dass Indizes meist die ersten Zeilen einer Abfrage schneller zurückgeben als Table-Scans.
Wenn Sie eine Abfrage schreiben, können Sie Index-Hints angeben, um dem Optimierer mitzuteilen, welche Indizes wie verwendet werden sollen. Allerdings heben Index-Hints die Entscheidungsfindungs-Logik des Abfrageoptimierers auf und sollten daher nur von erfahrenen Benutzern verwendet werden. Die Verwendung von Index-Hints kann die Qualität von Zugriffsplänen beeinträchtigen und zu Performanceverlusten führen. Siehe FROM-Klausel.
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |