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"