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

Postgres - Ist dies der richtige Weg, um einen Teilindex für eine boolesche Spalte zu erstellen?

Ich habe bestätigt, dass der Index wie erwartet funktioniert.

Ich habe die Zufallsdaten neu erstellt, nur dieses Mal diet_glutenfree gesetzt zu random() > 0.9 Es besteht also nur eine 10 %ige Wahrscheinlichkeit eines on bisschen.

Ich habe dann die Indizes neu erstellt und die Abfrage erneut versucht.

SELECT RecipeId from RecipeMetadata where diet_glutenfree;

Rückgabe:

'Index Scan using idx_recipemetadata_glutenfree on recipemetadata  (cost=0.00..135.15 rows=1030 width=16)'
'  Index Cond: (diet_glutenfree = true)'

Und:

SELECT RecipeId from RecipeMetadata where NOT diet_glutenfree;

Rückgabe:

'Seq Scan on recipemetadata  (cost=0.00..214.26 rows=8996 width=16)'
'  Filter: (NOT diet_glutenfree)'

Es scheint, dass mein erster Versuch verschmutzt war, da PG schätzt, dass es schneller ist, die gesamte Tabelle zu scannen, als den Index zu treffen, wenn es sowieso mehr als die Hälfte der Zeilen laden muss.

Ich denke jedoch, dass ich diese genauen Ergebnisse bei einem vollständigen Index der Spalte erhalten würde. Gibt es eine Möglichkeit, die Anzahl der indizierten Zeilen in einem Teilindex zu überprüfen?

AKTUALISIEREN

Der Index liegt bei etwa 40.000. Ich habe einen vollständigen Index derselben Spalte erstellt und er ist über 200 KB groß, also sieht es so aus, als wäre er definitiv ein Teil davon.