PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Postgres — czy to właściwy sposób na utworzenie częściowego indeksu w kolumnie logicznej?

Potwierdzam, że indeks działa zgodnie z oczekiwaniami.

Odtworzyłem losowe dane, tylko tym razem ustawiłem diet_glutenfree do random() > 0.9 więc istnieje tylko 10% szans na on trochę.

Następnie odtworzyłem indeksy i ponownie spróbowałem zapytania.

SELECT RecipeId from RecipeMetadata where diet_glutenfree;

Zwroty:

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

Oraz:

SELECT RecipeId from RecipeMetadata where NOT diet_glutenfree;

Zwroty:

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

Wygląda na to, że moja pierwsza próba była zanieczyszczona, ponieważ PG szacuje, że szybciej jest przeskanować całą tabelę niż trafić w indeks, jeśli i tak musi załadować ponad połowę wierszy.

Myślę jednak, że uzyskałbym te dokładne wyniki na pełnym indeksie kolumny. Czy istnieje sposób na zweryfikowanie liczby wierszy zindeksowanych w indeksie częściowym?

AKTUALIZUJ

Indeks wynosi około 40 tys. Utworzyłem pełny indeks tej samej kolumny i ma on ponad 200 tys., więc wygląda na to, że jest zdecydowanie częściowy.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę stwierdzić, czy Autovacuum PostgreSQL działa w systemie UNIX?

  2. Eksportuj skrypt CREATE do bazy danych

  3. Czy mogę automatycznie utworzyć tabelę w PostgreSQL z pliku csv z nagłówkami?

  4. Ef rdzeń 5 wiele do wielu filtrów

  5. Szybkie wyszukiwanie w pobliżu użytkowników za pomocą PostGIS