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

Postgres tidak menggunakan indeks pada array integer jika ekstensi intarray diinstal

Ini terjadi jika Anda telah menginstal "intarray " ekstensi. Mari kita uji:

drop extension intarray;

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

Ekstensi "intarray" menyediakan operatornya sendiri untuk array integer, seperti @> , sedangkan indeks dirancang untuk bekerja dengan operator array generik. Hal ini dapat ditunjukkan dengan menggunakan operator yang memenuhi syarat skema:

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"

Lihat diskusi ini untuk detail selengkapnya:Operator &&yang kelebihan beban dari modul intarray mencegah penggunaan indeks.

Jika Anda masih ingin memanfaatkan ekstensi "intarray", Anda dapat menentukan kelas operatornya sendiri "gin__int_ops" saat membuat indeks (bukan default "array_ops"):

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. Apa yang Setara dengan PostgreSQL Dengan SQL Server NVARCHAR?

  2. Urutkan berdasarkan kolom ASC, tetapi nilai NULL terlebih dahulu?

  3. tidak dapat menghapus objek karena batasan kunci asing

  4. postgreSQL - psql \i :cara menjalankan skrip di jalur yang diberikan

  5. Bagaimana cara awalan nama urutan?