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

Indeks wielokolumnowy na 3 polach o heterogenicznych typach danych

Indeks jednokolumnowy

Postgres może bardzo wydajnie łączyć wiele indeksów w jednym zapytaniu dzięki skanowaniu indeksów map bitowych . W większości przypadków wybierany jest najbardziej selektywny indeks (lub dwa w połączeniu ze skanowaniem indeksu bitmapy), a reszta jest filtrowana. Gdy zestaw wyników jest wystarczająco wąski, skanowanie większej liczby indeksów nie jest wydajne.

Indeks wielokolumnowy

Nadal szybciej jest mieć idealnie pasujący indeks wielokolumnowy, ale nie o rzędy wielkości.
Ponieważ chcesz uwzględnić typ tablicy Proponuję użyć GIN indeks. AFAIK, brakuje klas operatorów dla indeksów GiST ogólnego przeznaczenia w typie tablicy. (Wyjątkiem jest intarray dla integer tablice.)

Aby uwzględnić integer kolumna, najpierw zainstaluj dodatkowy moduł btree_gin , który zapewnia niezbędne klasy operatorów GIN. Uruchom raz na bazę danych :

CREATE EXTENSION btree_gin;

Wtedy powinieneś być w stanie utworzyć indeks wielokolumnowy:

CREATE INDEX tbl_abc_gin_idx ON tbl USING GIN(a, b, c);

Kolejność kolumn indeksu nie ma znaczenia dla indeksów WZ. Instrukcja:

Wielokolumnowy indeks GIN może być używany z warunkami zapytania, które obejmują dowolny podzbiór kolumn indeksu. W przeciwieństwie do B-drzewa lub GiST, skuteczność przeszukiwania indeksu jest taka sama, niezależnie od tego, której kolumny indeksu używają warunki zapytania.

Wyszukiwanie najbliższego sąsiada

Ponieważ dołączasz geometry PostGis wpisz, prawdopodobnie chcesz przeprowadzić wyszukiwanie najbliższego sąsiada, do którego potrzebujesz GiST indeks. W takim przypadku proponuję dwa indeksy:

CREATE INDEX tbl_ac_gist_idx ON tbl USING GiST(a, c);  -- geometry type
CREATE INDEX tbl_bc_gin_idx  ON tbl USING GIN(b, c);

Możesz dodać integer kolumna c do jednego lub obu. To zależy. Do tego potrzebujesz btree_gin lub btree_gist lub odpowiednio oba.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres UTC format daty i epoka, odwrócenie znaku

  2. Jak uzyskać różnicę dni/miesięcy/lat (datediff) między dwiema datami?

  3. Usuń zduplikowane wiersze (nie usuwaj wszystkich duplikatów)

  4. Jak działa funkcja Floor() w PostgreSQL

  5. Jak uzyskać dane lokalne w bazie danych tylko do odczytu przy użyciu programu dplyr?