sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgres använder inte index på heltalsarray om intarray-tillägget är installerat

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"



  1. SQL Server 2008 - Hjälp att skriva enkel INSERT Trigger

  2. Hur man gör automatisk mysql db backup med mysql workbench

  3. Enkel Oracle-variabel SQL-tilldelning

  4. SQLException:ORA-06550 vid anrop av PL/SQL-funktion från Java