PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Was ist ein Bitmap-Heap-Scan in einem Abfrageplan?

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, anstatt jede Festplattenseite zu besuchen, UND- und ODER-verknüpfte anwendbare Indizes zusammen scannt und nur die Festplattenseiten besucht, die erforderlich sind.

Dies unterscheidet sich von einem Index-Scan, bei dem der Index Zeile für Zeile der Reihe nach besucht wird – was bedeutet, dass eine Festplattenseite mehrmals besucht werden kann.

Betreff:Die Frage in Ihrem Kommentar ... Ja, genau das ist es.

Ein Index-Scan geht Zeilen für Zeile durch und öffnet Plattenseiten immer wieder, so oft wie nötig (einige bleiben natürlich im Speicher, aber Sie verstehen, worauf es ankommt).

Ein Bitmap-Index-Scan öffnet nacheinander eine kurze Liste von Festplattenseiten und erfasst jede zutreffende Zeile in jeder einzelnen (daher die sogenannte Recheck-Bedingung, die Sie in Abfrageplänen sehen).

Beachten Sie nebenbei, wie sich Clustering/Reihenreihenfolge bei beiden Methoden auf die damit verbundenen Kosten auswirkt. Wenn die Zeilen in zufälliger Reihenfolge überall verteilt sind, ist ein Bitmap-Index billiger. (Und tatsächlich, wenn sie wirklich alle sind Im Übrigen ist ein Seq-Scan am billigsten, da ein Bitmap-Index-Scan nicht ohne Overhead ist.)