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 » Algorithmen zur Duplikateliminierung

 

HashDistinct-Algorithmus (DistH)

HashDistinct nimmt eine einzelne Eingabe und gibt alle unterschiedlichen Zeilen zurück. HashDistinct geht folgendermaßen vor: Er liest seine Eingabe und baut eine speicherresidente Hash-Tabelle auf. Wenn eine Eingabezeile in der Hash-Tabelle gefunden wird, wird sie ignoriert. Andernfalls wird sie in die Arbeitstabelle geschrieben. Wenn die Eingabe nicht vollständig in die speicherresidente Hash-Tabelle passt, wird sie in kleinere Arbeitstabellen partitioniert und rekursiv abgearbeitet.

Für HashDistinct gilt außerdem:

  • Der HashDistinct-Algorithmus funktioniert sehr gut, wenn die eindeutigen Zeilen in eine speicherresidente Tabelle passen, ungeachtet von der Gesamtanzahl der Zeilen in der Eingabe.

  • Der HashDistinct-Algorithmus verwendet eine Arbeitstabelle und kann so auch unempfindliche oder Wert-empfindliche Semantik bereitstellen.

  • Der HashDistinct-Algorithmus gibt eine Zeile zurück, wenn er eine findet, die zuvor noch nicht zurückgegeben wurde. Die Ergebnisse eines HashDistinct-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.

  • Der HashDistinct-Algorithmus sperrt die Zeilen seiner Eingabe.

Der Optimierer vermeidet die Erstellung von Zugriffsplänen mit einem HashDistinct-Algorithmus, wenn er feststellt, dass während der Abfrageausführung eventuell zuwenig Speicher zur Verfügung stehen könnte. Wenn der HashDistinct-Algorithmus in einer Umgebung ausgeführt wird, in der sehr wenig Cachespeicher vorhanden ist, kann er nicht abgeschlossen werden. In diesem Fall verwirft HashDistinct seine Zwischenergebnisse, und stattdessen wird eine interne Niedrig-Speicher-Methode verwendet.

Die Speichermenge, die von HashDistinct 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.