PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Postgres - Đây có phải là cách phù hợp để tạo chỉ mục một phần trên cột boolean không?

Tôi đã xác nhận chỉ mục hoạt động như mong đợi.

Tôi đã tạo lại dữ liệu ngẫu nhiên, chỉ lần này đặt diet_glutenfree thành random() > 0.9 vì vậy chỉ có 10% cơ hội có on bit.

Sau đó, tôi đã tạo lại các chỉ mục và thử lại truy vấn.

SELECT RecipeId from RecipeMetadata where diet_glutenfree;

Lợi nhuận:

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

Và:

SELECT RecipeId from RecipeMetadata where NOT diet_glutenfree;

Lợi nhuận:

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

Có vẻ như nỗ lực đầu tiên của tôi đã bị ô nhiễm vì PG ước tính việc quét toàn bộ bảng sẽ nhanh hơn thay vì đạt được chỉ mục nếu nó vẫn phải tải hơn một nửa số hàng.

Tuy nhiên, tôi nghĩ rằng tôi sẽ nhận được những kết quả chính xác này trên một chỉ mục đầy đủ của cột. Có cách nào để xác minh số hàng được lập chỉ mục trong chỉ mục một phần không?

CẬP NHẬT

Chỉ số khoảng 40k. Tôi đã tạo một chỉ mục đầy đủ của cùng một cột và nó hơn 200 nghìn, vì vậy có vẻ như nó chắc chắn là một phần.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cài đặt chính xác của pool kết nối cơ sở dữ liệu database.yml cho các ứng dụng Rails đơn luồng

  2. C #, Entity Framework Core &PostgreSql:chèn một hàng đơn mất 20 giây

  3. CHÈN VÀO ... TỪ CHỌN ... QUAY LẠI ánh xạ id

  4. Tìm kích thước byte của một hàng trong PostgreSQL

  5. Vấn đề làm tròn kỳ lạ