Grundlagen der erweiterten Abfrageoptimierung

Microsoft SQL Server verwendet bei Sortier-, Schnittmengen-, Vereinigungs- und Restmengenvorgängen arbeitsspeicherinterne Sortierverfahren und Hashverknüpfungstechniken. Beim Verwenden dieses Abfrageplantyps unterstützt SQL Server die vertikale Tabellenpartitionierung, auch spaltenweise Speicherung genannt.

SQL Server unterstützt drei Typen von Verknüpfungsvorgängen:

  • Nested Loops-Verknüpfungen

  • Zusammenführungsverknüpfung

  • Hashverknüpfungen

Wenn eine Verknüpfungseingabe klein (weniger als 10 Zeilen) und die andere Verknüpfungseingabe relativ umfangreich ist und indizierte Verknüpfungsspalten aufweist, ist eine indizierte Nested Loops-Verknüpfung der schnellste Verknüpfungsvorgang, da sie mit dem geringsten E/A-Aufkommen und den wenigsten Vergleichen auskommen. Weitere Informationen zu Nested Loops finden Sie unter Grundlegendes zu Nested Loops-Verknüpfungen.

Sind beide Verknüpfungseingaben nicht klein, aber nach ihrer Verknüpfungsspalte sortiert (was beispielsweise der Fall ist, wenn sie beim Scannen sortierter Indizes gewonnen wurden), so ist eine Zusammenführungsverknüpfung der schnellste Verknüpfungsvorgang. Sind beide Verknüpfungseingaben umfangreich und etwa gleich groß, so bietet eine Zusammenführungsverknüpfung mit vorherigem Sortiervorgang und eine Hashverknüpfung vergleichbares Leistungsverhalten. Hashverknüpfungsvorgänge sind jedoch häufig erheblich schneller, wenn sich beide Eingaben im Umfang deutlich unterscheiden. Weitere Informationen finden Sie unter Grundlegendes zu Zusammenführungsverknüpfungen.

Hashverknüpfungen können umfangreiche, unsortierte, nicht indizierte Eingaben effizient verarbeiten. Sie sind für Zwischenergebnisse in komplexen Abfragen aus folgenden Gründen nützlich:

  • Zwischenergebnisse sind nicht indiziert (es sei denn, sie werden explizit auf einem Datenträger gespeichert und dann indiziert) und häufig nicht für den nächste Vorgang im Abfrageplan passend sortiert.

  • Abfrageoptimierer schätzen nur die Größe von Zwischenergebnissen ab. Weil Schätzungen in komplexen Abfragen sehr ungenau sein können, müssen Algorithmen zum Verarbeiten von Zwischenergebnissen nicht nur effizient sein, sondern auch kontrolliert beendet werden können, wenn ein Zwischenergebnis viel umfangreicher als erwartet ausfällt.

Die Hashverknüpfung lässt Reduktionen bei der Denormalisierung zu. Die Denormalisierung wird in der Regel verwendet, um bessere Leistung durch Reduzierung der Verknüpfungsvorgänge zu erreichen, und zwar trotz der Redundanzgefahr wie beispielsweise durch inkonsistente Aktualisierungen. Hashverknüpfungen vermindern den Bedarf, die Denormalisierung durchzuführen. Hashverknüpfungen ermöglichen die vertikale Partitionierung (die Darstellung von Spaltengruppen aus einer einzelnen Tabelle in separate Dateien oder Indizes), wodurch sie zu einer beachtenswerten Option für den physischen Datenbankentwurf wird. Weitere Informationen finden Sie unter Grundlegendes zu Hashverknüpfungen.