Из какой информации я мог бы найти, они оба решают одни и те же проблемы - более эзотерические операции, такие как сдерживание массива и пересечение (&, @ > , < @и т.д.). Однако мне было бы интересно узнать, когда использовать тот или иной (или ни один из них).
Документация PostgreSQL содержит некоторую информацию об этом:
- Поиск индекса GIN примерно в три раза быстрее, чем GiST
- Индексы GIN занимают примерно три раза дольше, чем GiST
- Индексы GIN примерно в десять раз медленнее обновляются, чем GiST
- Индексы GIN в два-три раза больше, чем GiST
Однако мне было бы особенно интересно узнать, влияет ли производительность, когда размер области памяти для индексации становится малым (т.е. размер индекса становится намного больше, чем доступная память)? Мне сообщили на IRC-канале #postgresql, что GIN должен хранить весь индекс в памяти, иначе он не будет эффективен, потому что, в отличие от B-Tree, он не знает, какую часть читать с диска для конкретный запрос? Вопрос будет: это правда (потому что мне также говорили об этом)? Существуют ли у GiST те же ограничения? Существуют ли другие ограничения, о которых я должен знать при использовании одного из этих алгоритмов индексирования?