Potvrdil jsem, že index funguje podle očekávání.
Znovu jsem vytvořil náhodná data, ale tentokrát jsem nastavil diet_glutenfree
na random() > 0.9
takže existuje pouze 10% šance na on
bit.
Poté jsem znovu vytvořil indexy a zkusil dotaz znovu.
SELECT RecipeId from RecipeMetadata where diet_glutenfree;
Vrátí:
'Index Scan using idx_recipemetadata_glutenfree on recipemetadata (cost=0.00..135.15 rows=1030 width=16)'
' Index Cond: (diet_glutenfree = true)'
A:
SELECT RecipeId from RecipeMetadata where NOT diet_glutenfree;
Vrátí:
'Seq Scan on recipemetadata (cost=0.00..214.26 rows=8996 width=16)'
' Filter: (NOT diet_glutenfree)'
Zdá se, že můj první pokus byl znečištěný, protože PG odhaduje, že je rychlejší naskenovat celou tabulku, než se dostat do indexu, pokud stejně musí načíst více než polovinu řádků.
Myslím si však, že bych tyto přesné výsledky získal na úplném indexu sloupce. Existuje způsob, jak ověřit počet řádků indexovaných v částečném indexu?
AKTUALIZACE
Index je kolem 40 tis. Vytvořil jsem úplný index stejného sloupce a má přes 200 kB, takže to vypadá, že je určitě částečný.