sql >> Database teknologi >  >> RDS >> PostgreSQL

Postgres bruger ikke indeks på heltalsarray, hvis intarray-udvidelsen er installeret

Dette sker, hvis du har installeret "intarray "-udvidelse. Lad os teste det:

drop extension intarray;

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

"Intarray"-udvidelsen giver sine egne operatorer for heltalsarrays, såsom @> , mens indekset er designet til at arbejde med de generiske array-operatorer. Dette kan demonstreres ved at bruge skema-kvalificerede 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 denne diskussion for flere detaljer:Overbelastet &&-operator fra intarray-modul forhindrer indeksbrug.

Hvis du stadig vil drage fordel af "intarray"-udvidelsen, kan du angive dens egen operatørklasse "gin__int_ops", når du opretter et indeks (i stedet for standard "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 2016:Opret en databasebruger

  2. Hvordan udtrækker jeg måned og år i en MySQL-dato og sammenligner dem?

  3. Mysql:Indstil kolonnetegnsæt

  4. Indsæt Python Dictionary ved hjælp af Psycopg2