Wann ist ein vollständiger Tabellenscan besser als ein Indexscan?

7

In welchen Szenarien (in SQL Server) ist ein vollständiger Tabellenscan besser als ein Indexscan?

Nick Chammas
quelle
Ein vollständiger Tabellenscan kann nur auf einem Heap durchgeführt werden.
Martin Smith
@Martin - Ich würde einen Clustered-Index-Scan als "vollständigen Tabellenscan" betrachten, und diese passieren häufig. :)
Nick Chammas

Antworten:

7

Wenn die Selektivität von Datensätzen sehr hoch ist, ist der vollständige Tabellenscan immer besser als der Indexscan.

http://www.techipost.com/single-index-versus-full-table-scan/

Bearbeiten von gbn:

Beispielsweise kann der Optimierer entscheiden, dass es einfacher ist, die Tabelle / den Clustered-Index zu scannen, wenn viele Schlüsselsuchen erforderlich wären (z. B. nicht gruppierter Index zu gruppierten Indizes für nicht wichtige Daten).

Oder Sie haben nicht viele unterschiedliche Werte in den indizierten Spalten

gbn
quelle
gutes Beispiel. Alle übrigen Antworten sagen dasselbe
Diese Seite ist nicht mehr online, aber hier ist ein weiterer nützlicher Link: percona.com/blog/2012/11/23/…
B Seven
11

Wenn die

  • Tisch ist klein genug, es gibt keinen praktischen Unterschied
  • statistisch gesehen würden Sie die meisten Zeilen sowieso zurückgeben

Der 2. Fall muss qualifiziert werden

  • Ein Index-Scan ersetzt eine Indexsuche, wenn ein Index abdeckt
  • Eine Indexsuche oder ein Indexscan mit vielen Zeilen, für die Schlüssel- / Lesezeichensuche erforderlich ist, ist teuer und ein Tabellenscan könnte besser sein

Schließlich

  • Ein Index-Scan und ein Tabellenscan sind für Clustered-Indizes ziemlich gleich
gbn
quelle
6

Ist der Tisch

  • ist sehr klein
  • Die Kosten für einen Index-Scan und eine Reihe von Lesezeichen-Suchvorgängen in der Basistabelle sind teurer als für einen vollständigen Tabellenscan
marc_s
quelle
4

Besser auf welche Weise?

Das Optimierungsprogramm wählt möglicherweise einen Tabellenscan aus, wenn ein Index nicht abdeckt, da ein Indexscan noch um eine Lesezeichensuche erweitert werden müsste.

In diesen Fällen ist eine schlecht indizierte Tabelle nicht besser als eine nicht indizierte Tabelle.

http://www.sqlservercentral.com/articles/Performance+Tuning/bookmarklookups/1899/

Cade Roux
quelle