Jag har bekräftat att indexet fungerar som förväntat.
Jag återskapade slumpmässiga data, bara den här gången ställde jag in diet_glutenfree
till random() > 0.9
så det finns bara 10 % chans att on
lite.
Jag skapade sedan om indexen och försökte frågan igen.
SELECT RecipeId from RecipeMetadata where diet_glutenfree;
Returnerar:
'Index Scan using idx_recipemetadata_glutenfree on recipemetadata (cost=0.00..135.15 rows=1030 width=16)'
' Index Cond: (diet_glutenfree = true)'
Och:
SELECT RecipeId from RecipeMetadata where NOT diet_glutenfree;
Returnerar:
'Seq Scan on recipemetadata (cost=0.00..214.26 rows=8996 width=16)'
' Filter: (NOT diet_glutenfree)'
Det verkar som att mitt första försök var förorenat eftersom PG uppskattar att det är snabbare att skanna hela tabellen snarare än att slå indexet om den ändå måste ladda över hälften av raderna.
Jag tror dock att jag skulle få dessa exakta resultat på ett fullständigt index över kolumnen. Finns det något sätt att verifiera antalet rader som indexeras i ett partiellt index?
UPPDATERA
Indexet är runt 40k. Jag skapade ett fullständigt index för samma kolumn och det är över 200 000, så det ser ut som att det definitivt är delvis.