Der SQL Anywhere-Abfrageoptimierer kann aus zwei physischen Implementierungen des SQL-Operators für Mengendifferenzen EXCEPT wählen: eine Sortierungs-basierte Variante, MergeExcept (EM), und eine Hash-basierte Variante, HashExcept (EH).
MergeExcept verwendet MergeJoin, um die Mengendifferenz zwischen den beiden Eingaben durch Analyse von Zeilenübereinstimmungen in sortierter Reihenfolge zu berechnen. Häufig ist ein explizites Sortieren der beiden Eingaben erforderlich. HashExcept verwendet HashAntisemijoin auf ähnliche Weise, um die Mengendifferenz zwischen den beiden Eingaben zu berechnen, und einen Left-Outer-Hash-Join, um die Differenzmenge der beiden Eingaben (EXCEPT ALL) zu berechnen.
HashExcept schaltet möglicherweise dynamisch auf eine Nested-Loops-Strategie um, wenn eine Speicherknappheit festgestellt wird. Tritt dieser Fall ein, wird ein Performance-Zähler erhöht. Sie können diesen Monitor anhand der Datenbank- oder Verbindungseigenschaft "QueryLowMemoryStrategy" lesen, im Statistikwert "QueryLowMemoryStrategy" im grafischen Plan (wenn die Ausführung Statistiken umfasst) oder im Zähler "Abfrage: Strategien für Speichermangel" im Windows-Systemmonitor.
HashExcept ist unter Windows Mobile bei Speicherknappheit deaktiviert.
Im Fall von EXCEPT werden MergeExcept und HashExcept mit einem der DISTINCT-Algorithmen gekoppelt, um zu gewährleisten, dass das Ergebnis keine Duplikate enthält. Bei EXCEPT ALL werden HashExceptAll und MergeExceptAll mit RowReplicate gekoppelt, wodurch die korrekte Anzahl von Duplikaten im Ergebnis berechnet wird.
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |