HashSemijoin führt einen Semijoin zwischen der linken und der rechten Seite durch. Die rechte Seite wird nur zur Eingrenzung der im Ergebnis erscheinenden Zeilen der linken Seite verwendet. Mit HashSemijoin wird die rechte Seite zum Aufbau einer speicherresidenten Hash-Tabelle verwendet, die nachfolgend von jeder Zeile der linken Seite durchsucht wird. Bei einer Übereinstimmung wird die linke Seitenzeile dem Ergebnis hinzugefügt und die nächste Zeile der linken Seite auf Übereinstimmung überprüft. Zumindest eine Join-Gleichheitsbedingung muss vorhanden sein, damit HashSemijoin vom Abfrageoptimierer berücksichtigt wird. Wie der Semijoin mit verschachtelten Schleifen (Nested-Loops-Semijoin) wird HashSemijoin in Fällen verwendet, in denen die Join-Eingaben Tabellenausdrücke einer existenziell-quantifizierten (IN, SOME, ANY, EXISTS) verschachtelten Abfrage enthalten, die als Join neu geschrieben wurde. Mit HashSemijoin erreicht man oft bessere Leistungen als mit NestedLoopsSemijoin, wenn die Join-Bedingungen Ungleichheiten enthalten oder wenn kein passender Index für einen ausreichend kostengünstigen indizierten Abruf der rechten Seite existiert.
Wie HashJoin kann auch HashSemijoin zur Strategie des Semijoins mit verschachtelten Schleifen (Nested-Loop-Semijoin) zurückkehren, sollte nicht ausreichend Cachespeicher für einen erfolgreichen Abschluss des Vorgangs zur Verfügung stehen. Tritt dieser Fall ein, 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.
Der Anteil des Speichers, der von einem HashSemijoin-Algorithmus verwendet werden kann, hängt von der Multiprogramming-Stufe des Datenbankservers und der Anzahl der aktiven Verbindungen ab. Siehe Threads in SQL Anywhere und Die Multiprogramming-Stufe des Datenbankservers konfigurieren.
Der Windows-Systemmonitor ist unter Windows Mobile möglicherweise nicht verfügbar.
Siehe "QueryLowMemoryStrategy" in Verbindungseigenschaften.
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |