PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Postgres nie używa indeksu w tablicy liczb całkowitych, jeśli jest zainstalowane rozszerzenie intarray

Dzieje się tak, jeśli zainstalowałeś „intarray ". Przetestujmy to:

drop extension intarray;

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

Rozszerzenie „intarray” udostępnia własne operatory dla tablic liczb całkowitych, takie jak @> , podczas gdy indeks jest zaprojektowany do pracy z ogólnymi operatorami tablicowymi. Można to zademonstrować za pomocą operatorów kwalifikowanych według schematu:

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"

Zobacz tę dyskusję, aby uzyskać więcej informacji:Przeciążony operator &&z modułu intarray uniemożliwia użycie indeksu.

Jeśli nadal chcesz skorzystać z rozszerzenia "intarray", możesz określić jego własną klasę operatora "gin__int_ops" podczas tworzenia indeksu (zamiast domyślnego "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. Nie można znaleźć biblioteki klienta PostgreSQL (libpq)

  2. Jak wygenerować zrzut Postgresql z kontenera Docker?

  3. Jak wykonać transakcje bazy danych za pomocą psycopg2/python db api?

  4. Play Framework + Heroku + Postgres nie może się połączyć

  5. Plan wyjaśniania SQL:co to jest Materialise?