Разница между показателями GiST и GIN

Я реализую таблицу, в которой есть столбец с типом данных tsvector, и я пытаюсь понять, какой индекс лучше использовать?

GIN или GiST?

Просматривая документацию postgres здесь Мне кажется, что это:

  • GiST быстрее обновляет и строит индекс и менее точным, чем gin.

  • GIN медленнее обновляет и строит индекс, но является более точным.

ОК, так зачем кому-то хотеть индексированное поле gist по джину? Если gist может дать вам неправильные результаты? На этом должно быть какое-то преимущество (внешняя производительность).

Может ли кто-нибудь объяснить в условиях неспециалиста, когда я хотел бы использовать GIN против GiST?

Ответ 1

Я не думаю, что я мог бы объяснить это лучше, чем руководство уже делает:

При выборе типа индекса для использования, GiST или GIN, рассмотрите эти различия в производительности:

  • Поисковые запросы индекса GIN примерно в три раза быстрее, чем GiST

  • Индексы GIN занимают примерно три раза дольше, чем GiST

  • Индексы GIN умеренно медленнее обновлять, чем индексы GiST, но примерно в 10 раз медленнее, если поддержка быстрого обновления отключена [...]

  • Индексы GIN в два-три раза больше, чем индексы GiST

Ссылка на текущее руководство, цитата из версии для 9.4, а ваша ссылка на версию 9.1 (по какой-то причине?).

Оценки размера и производительности немного устарели в руководстве - и с тех пор были удалены.
С Postgres 9.4 шансы существенно изменились в пользу GIN.
примечания к выпуску Postgres 9.4 включают в себя:

  • Уменьшить размер индекса GIN (Александр Коротков, Хейкки Линнакангас) [...]

  • Улучшить скорость поиска с использованием нескольких ключей GIN (Александр Коротков, Хейкки Linnakangas)

Обратите внимание, что существуют специальные варианты использования, которые требуют того или другого.

Одна вещь, которую вы неправильно поняли: вы никогда получаете неправильные результаты с индексом GiST. Индекс работает с хэш-значениями, что может привести к ложным срабатываниям индекса. Это должно стать актуальным только с очень большим количеством разных слов в ваших документах. Ложные срабатывания исключаются после повторной проверки фактической строки в любом случае. Руководство:

Алгоритм GiST является убыточным, что означает, что индекс может создавать ложные совпадений, и необходимо проверить фактическую строку таблицы на устранить такие ложные совпадения. (PostgreSQL делает это автоматически, когда это необходимо.)

Смелый акцент мой.