sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvad er en Bitmap-heap-scanning i en forespørgselsplan?

Den bedste forklaring kommer fra Tom Lane, som er algoritmens forfatter, medmindre jeg tager fejl. Se også wikipedia-artiklen.

Kort sagt, det er lidt ligesom en seq-scanning. Forskellen er, at i stedet for at besøge hver diskside, scanner et bitmapindeks AND'er og OR'er anvendelige indekser sammen og besøger kun de disksider, den skal.

Dette er forskelligt fra en indeksscanning, hvor indekset besøges række for række i rækkefølge -- hvilket betyder, at en diskside kan blive besøgt flere gange.

Re:spørgsmålet i din kommentar... Jep, det er præcis det.

En indeksscanning vil gennemgå rækkerne én efter én, åbne disksider igen og igen, så mange gange som nødvendigt (nogle vil selvfølgelig blive i hukommelsen, men du forstår pointen).

En bitmap-indeksscanning vil sekventielt åbne en kort liste over disksider og fange hver gældende række i hver enkelt (deraf den såkaldte recheck-tilstand, du ser i forespørgselsplaner).

Bemærk som en sidebemærkning, hvordan klynge/rækkerækkefølge påvirker de tilknyttede omkostninger med begge metoder. Hvis rækker er overalt i en tilfældig rækkefølge, vil et bitmapindeks være billigere. (Og faktisk, hvis de virkelig er alle i stedet vil en seq-scanning være billigst, da en bitmap-indeksscanning ikke er uden nogle overhead.)




  1. Fejl 1022 - Kan ikke skrive; dublet nøgle i tabel

  2. PostgreSQL jokertegn LIKE for enhver af en liste med ord

  3. MSSQL-fejl 'Den underliggende udbyder mislykkedes ved åben'

  4. Sådan bruger du UPDATE fra SELECT i SQL Server