Detta händer om du har installerat "intarray " tillägg. Låt oss testa det:
drop extension intarray;
explain analyze
select * from test_intarray where codes @> array[123];
-- Uses "Bitmap Index Scan on test_intarray_idx"
Tillägget "intarray" tillhandahåller sina egna operatorer för heltalsmatriser, såsom @>
, medan indexet är utformat för att fungera med generiska arrayoperatorer. Detta kan demonstreras genom att använda schemakvalificerade operatorer:
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"
Se den här diskussionen för mer information:Överbelastad &&-operator från intarray-modulen förhindrar indexanvändning.
Om du fortfarande vill dra nytta av "intarray"-tillägget kan du ange sin egen operatorklass "gin__int_ops" när du skapar ett index (istället för standardinställningen "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"