Что такое GiST индекс и как он устроен
Что проверяют
Знаете ли вы, что кроме сбалансированного дерева по значению в PostgreSQL есть индексы под другие классы запросов, и понимаете ли, когда обычный индекс просто не применится. Для бэкендера это чаще всего история про диапазоны дат, геометрию и поиск по похожести.
Как отвечать
GiST это не конкретный индекс, а каркас: дерево общее, а смысл ему придаёт класс операторов через набор опорных функций. Одна отвечает на вопрос, может ли поддерево содержать подходящие записи, другая описывает поддерево обобщающим значением, ещё две решают, в какую ветку класть новую запись и как делить переполненную страницу, отдельная считает расстояние для поиска ближайших. Поэтому один механизм обслуживает и геометрию, и диапазоны, и полнотекстовый поиск, и триграммы.
Что это даёт на практике: операторы пересечения и вложенности для диапазонов и геометрии, ограничение исключения, когда база сама не пускает пересекающиеся брони (в коде приложения такую гонку проверкой перед вставкой не закрыть), поиск ближайших через сортировку по оператору расстояния, поиск подстроки по триграммам там, где обычный индекс бесполезен.
Важная деталь для честного ответа: верхние узлы хранят приблизительное описание поддерева, поэтому индекс отдаёт кандидатов, а окончательную проверку делает перепроверка по таблице. Это нормально и объясняет, почему выигрыш зависит от селективности.
Где спотыкаются
Выбирают между GiST и GIN наугад. Для полнотекстового поиска и массивов быстрее читает GIN, зато GiST дешевле обновляется и умеет поиск ближайших, так что выбор определяется соотношением чтения и записи.
Ждут ускорения обычного равенства и сортировки. Это работа сбалансированного дерева по значению, GiST его не заменяет и на таких запросах только занимает место и тормозит вставку.
Создают индекс и не смотрят план. Если оператор из запроса не входит в класс операторов индекса, планировщик спокойно сделает полный проход, а при смешении равенства и пересечения в ограничении исключения понадобится расширение, добавляющее нужные классы операторов.