sql >> Databáze >  >> RDS >> PostgreSQL

Postgres – Je toto správný způsob, jak vytvořit částečný index na booleovském sloupci?

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ý.



  1. Rails 3, ActiveRecord, PostgreSQL - příkaz .uniq nefunguje?

  2. MemSQL - Náhradní klíč jako primární a různé jedinečné klíče současně při vytváření tabulky

  3. SQL:procházet stejnou tabulkou

  4. Chybí artefakt com.oracle:ojdbc6:jar:11.2.0.3