web-dev-qa-db-fra.com

Qu'est-ce qu'une "analyse de tas Bitmap" dans un plan de requête?

Je veux connaître le principe du "Bitmap heap scan", je sais que cela arrive souvent lorsque j'exécute une requête avec OR dans la condition.

Qui peut expliquer le principe d'une "analyse de tas Bitmap"?

96
francs

La meilleure explication vient de Tom Lane , qui est l'auteur de l'algorithme, sauf erreur de ma part. Voir aussi article wikipedia .

En bref, c'est un peu comme un scan séquentiel. La différence est que, plutôt que de visiter chaque page de disque, une analyse d'index bitmap et des index applicables OR et OR ensemble, et ne visite que les pages de disque dont il a besoin.

Ceci est différent d'un balayage d'index, où l'index est visité ligne par ligne dans l'ordre - ce qui signifie qu'une page de disque peut être visitée plusieurs fois.


Re: la question dans votre commentaire ... Oui, c'est exactement ça.

Une analyse d'index parcourra les lignes une par une, ouvrant les pages du disque encore et encore, autant de fois que nécessaire (certaines resteront bien sûr en mémoire, mais vous obtenez le point).

Une analyse d'index bitmap ouvrira séquentiellement une courte liste de pages de disque, et récupérera chaque ligne applicable dans chacune (d'où la soi-disant condition de recontrôle que vous voyez dans les plans de requête).

Notez, en passant, comment la mise en cluster/l'ordre des lignes affecte les coûts associés avec l'une ou l'autre méthode. Si les lignes sont partout dans un ordre aléatoire, un index bitmap sera moins cher. (Et, en fait, s'ils sont vraiment tous partout, un scan seq sera moins cher, car un scan d'index bitmap n'est pas sans aérien.)

113
Denis de Bernardy