HashGroupBy baut eine speicherresidente Hash-Tabelle auf, die eine Zeile pro Gruppe enthält. Beim Lesen der Eingabezeilen werden die zugeordneten Gruppen in der Arbeitstabelle gesucht. Die Aggregatfunktionen werden aktualisiert, und die Gruppenzeile wird erneut in die Arbeitstabelle geschrieben. Wenn kein Gruppendatensatz vorhanden ist, wird ein neuer Gruppendatensatz initialisiert und in die Arbeitstabelle eingefügt.
HashGroupBy berechnet alle Zeilen des Ergebnisses, bevor er die erste Zeile zurückgibt, und kann verwendet werden, um einem vollständig empfindlichen bzw. Wert-empfindlichen Cursor gerecht zu werden. Die Ergebnisse eines Hash Group By-Algorithmus müssen jedoch vor der Rückgabe aus der Abfrage vollständig materialisiert werden. Um dies sicherzustellen, fügt der Optimierer nötigenfalls dem Ausführungsplan eine Arbeitstabelle hinzu.
HashGroupBy kann parallel ausgeführt werden.
HashGroupBy funktioniert sehr gut, wenn die Gruppen in den Speicher passen, unabhängig von der Größe der Eingabe. Wenn die Hash-Tabelle nicht in den Speicher passt, wird die Eingabe in kleinere Arbeitstabellen unterteilt, die dann rekursiv weiter unterteilt werden, bis sie in den Speicher passen. Der Optimierer vermeidet die Erstellung von Zugriffsplänen unter Verwendung von HashGroupBy, wenn er feststellt, dass während der Abfrageausführung eventuell zu wenig Speicher zur Verfügung stehen könnte. Wenn es zu wenig Speicher für die Partitionen gibt, verwirft der Optimierer die Zwischenergebnisse von HashGroupBy und verwendet stattdessen eine interne Niedrig-Speicher-Methode.
Die Speichermenge, die von einem HashGroupBy-Operator 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.
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |