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.