sql >> Databasteknik >  >> RDS >> PostgreSQL

Vad är en bitmappshögavsökning i en frågeplan?

Den bästa förklaringen kommer från Tom Lane, som är algoritmens författare om jag inte har fel. Se även wikipedia-artikeln.

Kort sagt, det är lite som en seq scan. Skillnaden är att, snarare än att besöka varje disksida, skannar ett bitmappsindex av AND och OR tillämpliga index tillsammans och bara besöker de disksidor som den behöver.

Detta skiljer sig från en indexsökning, där indexet besöks rad för rad i ordning -- vilket innebär att en disksida kan besökas flera gånger.

Re:frågan i din kommentar... Japp, det är precis det.

En indexskanning kommer att gå igenom raderna en efter en och öppna disksidor om och om igen, så många gånger som behövs (en del kommer naturligtvis att stanna i minnet, men du förstår poängen).

En bitmappsindexsökning öppnar sekventiellt en kortlista med disksidor och tar tag i varje tillämplig rad i var och en (därav den så kallade omkontrollvillkoren som du ser i frågeplaner).

Notera, för övrigt, hur klustring/radordning påverkar de associerade kostnaderna med båda metoderna. Om rader finns överallt i en slumpmässig ordning, blir ett bitmappsindex billigare. (Och faktiskt, om de verkligen är alla överallt kommer en seq-skanning att vara billigast, eftersom en bitmappsindexskanning inte är utan en del overhead.)




  1. Odefinierad funktion mysql_connect()

  2. Hur man konverterar UTC-datum till lokal tidszon i MySql Select Query

  3. Hur man söker efter exakt matchade ord med MySql Query

  4. SQL-fel:ORA-00933:SQL-kommandot avslutades inte korrekt