sql >> Databáze >  >> RDS >> PostgreSQL

Postgres nepoužívá index na celočíselném poli, pokud je nainstalováno rozšíření intarray

K tomu dojde, pokud jste nainstalovali "intarray " rozšíření. Pojďme to otestovat:

drop extension intarray;

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

Rozšíření "intarray" poskytuje své vlastní operátory pro celočíselná pole, například @> , zatímco index je navržen tak, aby pracoval s obecnými operátory polí. To lze demonstrovat pomocí operátorů kvalifikovaných pro schéma:

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"

Další podrobnosti naleznete v této diskusi:Přetížený operátor &&z modulu intarray brání použití indexu.

Pokud přesto chcete využít rozšíření "intarray", můžete při vytváření indexu zadat jeho vlastní třídu operátorů "gin__int_ops" (místo výchozího "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. Nesprávná hodnota řetězce v python+django+Mysql

  2. Vlastní objednávka v Oracle SQL

  3. MySQL- Nelze přejít na řádek 0 v indexu výsledků MySQL

  4. Funkce BITAND() v Oracle