PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Postgres - Това ли е правилният начин за създаване на частичен индекс на булева колона?

Потвърдих, че индексът работи според очакванията.

Създадох отново произволните данни, само че този път зададох diet_glutenfree до random() > 0.9 така че има само 10% шанс за on малко.

След това създадох отново индексите и опитах отново заявката.

SELECT RecipeId from RecipeMetadata where diet_glutenfree;

Връща:

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

И:

SELECT RecipeId from RecipeMetadata where NOT diet_glutenfree;

Връща:

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

Изглежда, че първият ми опит беше замърсен, тъй като PG смята, че е по-бързо да сканира цялата таблица, отколкото да удари индекса, ако така или иначе трябва да зареди повече от половината редове.

Мисля обаче, че ще получа тези точни резултати в пълен индекс на колоната. Има ли начин да се провери броят на редовете, индексирани в частичен индекс?

АКТУАЛИЗАЦИЯ

Индексът е около 40k. Създадох пълен индекс на същата колона и той е над 200k, така че изглежда, че определено е частичен.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL не може да извика json_object_keys на скалар

  2. Как да проверя дали тригерът съществува в PostgreSQL?

  3. Дизайн на база данни за създаване на таблици в движение

  4. Как да съпоставя регулярен израз на колона за PostgreSQL в EF Core?

  5. Heroku Rails Rake Task за синхронизиране на производство и локална база данни