Трябва да използвате GiST, ако искате да използвате който и да е метод на индексиране, различен от обикновените индекси на b-дърво (или хеш индекси, но те всъщност не трябва да се използват). PostGIS индексите изискват GiST.
Индексите на B-дърво могат да се използват само за основни операции, включващи равенство или подреждане, като =
, <
, <=
, >код> ,
>=код> ,
<>код> ,
МЕЖДУ
и IN
. Въпреки че можете да създадете индекс на b-дърво на геометричен обект (точка, регион и т.н.), той всъщност може да се използва само за равенство като подреждане на сравнения като >
като цяло са безсмислени за такива обекти. Необходим е GiST индекс, за да поддържа по-сложни и общи сравнения като "съдържа", "пресича" и т.н.
Можете да използвате btree_gist
разширение
за активиране на индексиране на b-дърво за GiST. Той е значително по-бавен от обикновените индекси на b-дърво, но ви позволява да създадете индекс с няколко колони, който съдържа както типове само за GiST, така и обикновени типове като text
, цяло число
и т.н.
В тези ситуации наистина трябва да използвате explain анализ
(explain.depesz.com
е полезно за това), за да проучите как Pg използва различни индекси и комбинации от индекси, които създавате. Опитайте различно подреждане на колони в индекси с няколко колони и вижте дали два или повече отделни индекса са по-ефективни.
Силно подозирам, че ще получите най-добри резултати с многоколонния GiST индекс в този случай, но бих опитал няколко различни комбинации от индекси и подреждане на индексни колони, за да видя.