Ich möchte das Prinzip des "Bitmap-Heap-Scans" kennen. Ich weiß, dass dies häufig passiert, wenn ich eine Abfrage mit OR
in der Bedingung ausführe .
Wer kann das Prinzip eines "Bitmap-Heap-Scans" erklären?
quelle
Ich möchte das Prinzip des "Bitmap-Heap-Scans" kennen. Ich weiß, dass dies häufig passiert, wenn ich eine Abfrage mit OR
in der Bedingung ausführe .
Wer kann das Prinzip eines "Bitmap-Heap-Scans" erklären?
Die beste Erklärung kommt von Tom Lane , dem Autor des Algorithmus, sofern ich mich nicht irre. Siehe auch den Wikipedia-Artikel .
Kurz gesagt, es ist ein bisschen wie ein Seq-Scan. Der Unterschied besteht darin, dass ein Bitmap-Index nicht jede Festplattenseite besucht, sondern die zutreffenden Indizes ANDs und ORs zusammen scannt und nur die erforderlichen Festplattenseiten aufruft.
Dies unterscheidet sich von einem Index-Scan, bei dem der Index zeilenweise nacheinander besucht wird. Dies bedeutet, dass eine Festplattenseite möglicherweise mehrmals besucht wird.
Betreff: die Frage in Ihrem Kommentar ... Ja, genau das ist es.
Ein Index-Scan durchläuft die Zeilen nacheinander und öffnet die Festplattenseiten so oft wie nötig immer wieder (einige bleiben natürlich im Speicher, aber Sie verstehen es).
Ein Bitmap-Index-Scan öffnet nacheinander eine kurze Liste von Festplattenseiten und greift auf jede zutreffende Zeile in jeder zu (daher der sogenannte Recheck-Zustand, den Sie in Abfrageplänen sehen).
Beachten Sie außerdem, wie sich Clustering / Zeilenreihenfolge auf die damit verbundenen Kosten bei beiden Methoden auswirkt. Wenn sich die Zeilen in zufälliger Reihenfolge befinden, ist ein Bitmap-Index günstiger. (Und in der Tat, wenn sie wirklich überall sind , ist ein seq-Scan am billigsten, da ein Bitmap-Index-Scan nicht ohne Overhead ist.)
index-only scan
Meldung, dass in der Abfrage nur auf indizierte Spalten zugegriffen wird. In diesem Fallindex-only scan
muss nicht auf Heap-Daten (Datenseite) zugegriffen