PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Postgres не използва индекс на целочислен масив, ако е инсталирано разширение intarray

Това се случва, ако сте инсталирали "intarray ". Нека го тестваме:

drop extension intarray;

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

Разширението "intarray" предоставя свои собствени оператори за масиви с цели числа, като @> , докато индексът е проектиран да работи с генеричните оператори за масиви. Това може да се демонстрира чрез използване на квалифицирани от схема оператори:

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"

Вижте тази дискусия за повече подробности:Претовареният &&оператор от модула за интаррей предотвратява използването на индекс.

Ако все пак искате да се възползвате от разширението „intarray“, можете да посочите неговия собствен операторен клас „gin__int_ops“, когато създавате индекс (вместо „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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgresql:Как да намерите pg_hba.conf файл с Mac OS X

  2. Набор на JDBCTemplate вложен POJO с BeanPropertyRowMapper

  3. PostgreSQL създава индекс при прехвърляне от низ към дата

  4. Как да видите основния курсор на активната заявка

  5. SQL:как да изберете реда с най-известните стойности?