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