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

Postgres không sử dụng chỉ mục trên mảng số nguyên nếu phần mở rộng intarray được cài đặt

Điều này xảy ra nếu bạn đã cài đặt " intarray "phần mở rộng. Hãy kiểm tra nó:

drop extension intarray;

explain analyze
select * from test_intarray where codes @> array[123];
-- Uses "Bitmap Index Scan on test_intarray_idx"

Phần mở rộng "intarray" cung cấp các toán tử riêng cho mảng số nguyên, chẳng hạn như @> , trong khi chỉ mục được thiết kế để hoạt động với các toán tử mảng chung. Điều này có thể được chứng minh bằng cách sử dụng các toán tử đủ điều kiện của lược đồ:

create extension intarray;

explain analyze
select * from test_intarray where codes @> array[123];
-- Uses "Seq Scan on test_intarray"

explain analyze
select * from test_intarray where codes operator([email protected]>) array[123];
-- Uses "Bitmap Index Scan on test_intarray_idx"

Xem cuộc thảo luận này để biết thêm chi tiết: Toán tử &&bị quá tải từ mô-đun intarray ngăn cản việc sử dụng chỉ mục.

Nếu bạn vẫn muốn tận dụng tiện ích mở rộng "intarray", bạn có thể chỉ định lớp toán tử riêng của nó "gin__int_ops" khi tạo chỉ mục (thay vì "array_ops" mặc định):

create index test_intarray_idx2 on test_intarray using GIN (codes gin__int_ops);

explain analyze
select * from test_intarray where codes @> array[123];
-- Uses "Bitmap Index Scan on test_intarray_idx2"



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. GROUP BY trong Postgres - không bình đẳng cho kiểu dữ liệu JSON?

  2. Cách hoạt động của to_char () trong PostgreSQL

  3. PostgreSQL:khôi phục cơ sở dữ liệu từ kết xuất - lỗi cú pháp

  4. GROUP BY và COUNT bằng ActiveRecord

  5. sao lưu cơ sở dữ liệu odoo12 không có chủ sở hữu?