sql >> Database >  >> RDS >> PostgreSQL

Postgres - Is dit de juiste manier om een ​​gedeeltelijke index op een booleaanse kolom te maken?

Ik heb bevestigd dat de index werkt zoals verwacht.

Ik heb de willekeurige gegevens opnieuw gemaakt, alleen deze keer ingesteld op diet_glutenfree naar random() > 0.9 dus er is slechts 10% kans op een on beetje.

Ik heb vervolgens de indexen opnieuw gemaakt en de query opnieuw geprobeerd.

SELECT RecipeId from RecipeMetadata where diet_glutenfree;

Retourneren:

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

En:

SELECT RecipeId from RecipeMetadata where NOT diet_glutenfree;

Retourneren:

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

Het lijkt erop dat mijn eerste poging vervuild was, aangezien PG schat dat het sneller is om de hele tabel te scannen in plaats van de index te raken als het toch meer dan de helft van de rijen moet laden.

Ik denk echter dat ik deze exacte resultaten zou krijgen op een volledige index van de kolom. Is er een manier om het aantal geïndexeerde rijen in een gedeeltelijke index te verifiëren?

UPDATE

De index ligt rond de 40k. Ik heb een volledige index gemaakt van dezelfde kolom en het is meer dan 200k, dus het lijkt erop dat het zeker gedeeltelijk is.



  1. Hoe PHP MySQL-databaseverbinding te testen met behulp van script

  2. Wat zijn de voordelen van het gebruik van transactiepooling met pgbouncer?

  3. Postgres gesplitste string met dubbele aanhalingstekens naar meerdere rijen?

  4. Een web-app maken vanaf nul met Python Flask en MySQL:deel 2