Ответ 1
Вы должны использовать GiST, если хотите использовать какой-либо индексный метод, отличный от обычных индексов дерева b (или хеш-индексов, но они действительно не должны использоваться). Индексы PostGIS требуют GiST.
Индексы B-дерева могут использоваться только для основных операций, связанных с равенством или упорядочением, например =
, <
, <=
, >
, >=
, <>
, BETWEEN
и IN
. Хотя вы можете создать индекс b-дерева для объекта геометрии (точки, региона и т.д.), Его можно использовать только для равенства, так как упорядочение сравнений типа >
обычно не имеет смысла для таких объектов. Индекс GiST необходим для поддержки более сложных и общих сравнений, таких как "содержит", "пересекает" и т.д.
Вы можете использовать расширение btree_gist
, чтобы включить индексирование b-дерева для GiST. Это значительно медленнее, чем обычные индексы b-tree, но позволяет создать индекс с несколькими столбцами, который содержит как типы GiST, так и обычные типы, такие как text
, integer
и т.д.
В этих ситуациях вам действительно нужно использовать explain analyze
(explain.depesz.com для этого), чтобы изучить, как Pg использует различные индексы и комбинации индексов, которые вы Создайте. Попробуйте разные порядки столбцов в многоколоночных индексах и посмотрите, эффективны ли два или более отдельных индекса.
Я сильно подозреваю, что в этом случае вы получите наилучшие результаты с помощью многоколоночного индекса GiST, но я бы попробовал несколько разных комбинаций индексов и порядков столбцов индекса.