Je veux connaître le principe de "l'analyse de tas Bitmap", je sais que cela arrive souvent lorsque j'exécute une requête avec OR
dans la condition.
Qui peut expliquer le principe d'un "scan de tas Bitmap"?
Je veux connaître le principe de "l'analyse de tas Bitmap", je sais que cela arrive souvent lorsque j'exécute une requête avec OR
dans la condition.
Qui peut expliquer le principe d'un "scan de tas Bitmap"?
La meilleure explication vient de Tom Lane , qui est l'auteur de l'algorithme sauf si je me trompe. Voir aussi l' article wikipedia .
Bref, c'est un peu comme un seq scan. La différence est que, plutôt que de visiter chaque page de disque, un index bitmap scanne les ET et les OU les index applicables ensemble, et ne visite que les pages de disque dont il a besoin.
Ceci est différent d'une analyse 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 ... Ouais, 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 comprenez bien).
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'elles (d'où la soi-disant recheck cond que vous voyez dans les plans de requête).
Notez, en passant, comment le regroupement / 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 partout , un scan seq sera le moins cher, car un scan d'index bitmap n'est pas sans frais généraux.)
index-only scan
moment où seule la colonne indexée est accessible dans la requête. dans ce cas,index-only scan
n'a pas besoin d'accéder aux données du tas (page de données): postgresql.org/docs/12/indexes-index-only-scans.html