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

Verstehen von Bitmap-Indizes in Postgresql

Die Bitmap der Seiten wird dynamisch für jede Abfrage erstellt. Es wird nicht zwischengespeichert oder wiederverwendet und am Ende des Bitmap-Index-Scans verworfen.

Es macht keinen Sinn, die Seitenbitmap im Voraus zu erstellen, da ihr Inhalt von den Abfrageprädikaten abhängt .

Angenommen, Sie suchen nach x=1 and y=2 . Sie haben B-Tree-Indizes auf x und y . PostgreSQL kombiniert x nicht und y in eine Bitmap und suchen Sie dann die Bitmap. Es scannt den Index x für die Seitenadresse aller Seiten mit x=1 und erstellt eine Bitmap, in der die Seiten x=1 enthalten könnten sind wahr. Dann scannt es y Suchen Sie nach den Seitenadressen, bei denen y könnte gleich 2 sein , daraus eine Bitmap erstellen. Dann werden sie UND-verknüpft, um Seiten zu finden, auf denen beide x=1 sind und y=2 könnte wahr sein. Schließlich scannt es die Tabelle selbst, liest nur die Seiten, die Kandidatenwerte enthalten könnten, liest jede Seite und behält nur die Zeilen, in denen x=1 and y=2 .

Wenn Sie nun nach etwas wie einem zwischengespeicherten, vorgefertigten Bitmap-Index suchen, gibt es so etwas in PostgreSQL 9.5:BRIN-Indizes . Diese sind für sehr große Tabellen gedacht und bieten eine Möglichkeit, Bereiche der Tabelle zu finden, die übersprungen werden können, weil sie bekanntermaßen keinen gewünschten Wert enthalten.