sql >> Database >  >> RDS >> PostgreSQL

Postgres gebruikt geen index op integer-array als de intarray-extensie is geïnstalleerd

Dit gebeurt als je de "intarray hebt geïnstalleerd " extensie. Laten we het testen:

drop extension intarray;

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

De extensie "intarray" biedt zijn eigen operators voor integer-arrays, zoals @> , terwijl de index is ontworpen om te werken met de generieke array-operators. Dit kan worden aangetoond door gebruik te maken van voor schema gekwalificeerde operators:

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"

Zie deze discussie voor meer details:Overbelaste &&-operator van intarray-module voorkomt indexgebruik.

Als u nog steeds gebruik wilt maken van de "intarray"-extensie, kunt u de eigen operatorklasse "gin__int_ops" opgeven bij het maken van een index (in plaats van de standaard "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. Hoe moeten Unix-tijdstempels worden opgeslagen in int-kolommen?

  2. sql - invoegen indien niet bestaat

  3. Zijn aanhalingstekens rond tabellen en kolommen in een MySQL-query echt nodig?

  4. Many to Many binnen Many to Many Table