PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Postgres - Apakah ini cara yang tepat untuk membuat indeks parsial pada kolom boolean?

Saya telah mengonfirmasi bahwa indeks berfungsi seperti yang diharapkan.

Saya membuat ulang data acak, hanya kali ini set diet_glutenfree ke random() > 0.9 jadi hanya ada 10% kemungkinan on sedikit.

Saya kemudian membuat ulang indeks dan mencoba kueri lagi.

SELECT RecipeId from RecipeMetadata where diet_glutenfree;

Pengembalian:

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

Dan:

SELECT RecipeId from RecipeMetadata where NOT diet_glutenfree;

Pengembalian:

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

Tampaknya upaya pertama saya tercemar karena PG memperkirakan lebih cepat untuk memindai seluruh tabel daripada menekan indeks jika harus memuat lebih dari setengah baris.

Namun, saya pikir saya akan mendapatkan hasil yang tepat ini pada indeks penuh kolom. Apakah ada cara untuk memverifikasi jumlah baris yang diindeks dalam indeks parsial?

PERBARUI

Indeksnya sekitar 40k. Saya membuat indeks lengkap dari kolom yang sama dan jumlahnya lebih dari 200 ribu, jadi sepertinya itu pasti sebagian.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. bagaimana cara awalan string sebelum urutan yang dihasilkan oleh postgresql?

  2. Dengan sqlalchemy cara mengikat secara dinamis ke mesin database berdasarkan permintaan

  3. Menginstal PL/Ruby di PostgreSQL 9.3

  4. Bagaimana cara melewatkan tabel atau baris ke suatu fungsi di Postgresql?

  5. Kapan kita bisa menggunakan nomor pengenal alih-alih namanya di PostgreSQL?