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

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Abfrageverarbeitung » Abfragen optimieren und ausführen » Algorithmen zur Abfrageausführung » Typen von Algorithmen » Join-Algorithmen

 

HashJoin-Algorithmen (JH, JHSP, JHFO, JHAP, JHO, JHPO)

Der HashJoin-Algorithmus erstellt eine speicherresidente Hash-Tabelle der kleineren der beiden Eingaben. Dann liest er die größere Eingabe und untersucht die Hash-Tabelle im Speicher auf Übereinstimmungen, die dann in eine Arbeitstabelle geschrieben werden. Wenn die kleinere Eingabe nicht in den Speicher passt, teilt HashJoin beide Eingaben in kleinere Arbeitstabellen auf. Diese kleineren Arbeitstabellen werden rekursiv abgearbeitet, bis die kleinere Eingabe in den Speicher passt.

Für HashJoin gilt außerdem:

  • Er berechnet alle Zeilen in seinen Ergebnissen, bevor er die erste Zeile zurückgibt.

  • Er verwendet eine Arbeitstabelle, die unempfindliche Semantik bereitstellt, es sei denn, ein wertempfindlicher Cursor wurde angefordert.

  • Er kann parallel ausgeführt werden.

  • Er sperrt Zeilen in seiner Eingabe, bevor sie in den Speicher kopiert werden.

HashJoin erzielt die beste Performance, wenn die kleinere Eingabe in den Speicher passt, unabhängig von der Größe der größeren Eingabe. Im Allgemeinen wählt der Optimierer einen Hash-Join, wenn eine der Eingaben erwartungsgemäß bedeutend kleiner ist als die andere.

Wenn HashJoin in einer Umgebung ausgeführt wird, in der nicht genügend Cachespeicher vorhanden ist, um alle Zeilen mit einem bestimmten Wert der Join-Attribute zu speichern, kann er nicht abgeschlossen werden. In diesem Fall verwirft HashJoin die Zwischenergebnisse, und stattdessen wird ein indexbasierter Nested-Loops-Join verwendet. Alle Zeilen der kleineren Tabelle werden gelesen und zur Untersuchung der Arbeitstabelle auf Übereinstimmungen benutzt. Die indexbasierte Strategie ist deutlich langsamer als andere Join-Verfahren, und der Optimierer vermeidet die Erstellung von Zugriffsplänen mit einem Hash-Join, wenn er feststellt, dass während der Abfrageausführung eventuell zu wenig Speicher zur Verfügung stehen könnte.

Die Speichermenge, die von einem Hash-Join-Operator verwendet werden kann, hängt von der Multiprogramming-Stufe des Datenbankservers und der Anzahl der aktiven Verbindungen ab. Weitere Hinweise finden Sie unter Threads in SQL Anywhere und Die Multiprogramming-Stufe des Servers einstellen.

Wenn die Nested-Loops-Strategie aufgrund unzureichenden Speichers verwendet werden muss, wird ein Performance-Zähler erhöht. Sie können diesen Monitor mit der QueryLowMemoryStrategy-Datenbank- oder Verbindungseigenschaft lesen bzw. im Zähler "Abfrage: Strategien für Speichermangel" im Windows-Systemmonitor.

Wenn nur wenig Speicherplatz vorhanden ist, ist HashJoin auf Windows Mobile deaktiviert.

Hinweis

Der Windows-Systemmonitor ist unter Windows Mobile möglicherweise nicht verfügbar.

Weitere Hinweise finden Sie unter "QueryLowMemoryStrategy" in Verbindungseigenschaften und Die Multiprogramming-Stufe des Servers einstellen.