Сведения о вопросе

ЧОВИД

13:09, 11th August, 2020

Теги

PostgreSQL: индексы GIN или GiST?

Просмотров: 530   Ответов: 1

Из той информации, которую я смог найти, они оба решают одни и те же проблемы - более эзотерические операции, такие как удержание массива и пересечение (&&,@>, <@, и т. д.). Однако мне было бы интересно получить совет о том, когда использовать тот или иной метод (или ни один из них).
Документация PostgreSQL содержит некоторую информацию об этом:

  • GIN поиск по индексу примерно в три раза быстрее, чем GiST
  • GIN индексация занимает примерно в три раза больше времени, чем GiST
  • GIN индексы обновляются примерно в десять раз медленнее, чем GiST
  • GIN индексы в two-to-three раз больше, чем GiST

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



  Сведения об ответе

SSESION

18:38, 7th August, 2020

Прежде всего, нужно ли использовать их для индексации текстового поиска? GIN и GiST являются индексами, специализированными для некоторых типов данных. Если вам нужно индексировать простые char или целочисленные значения, то лучше всего использовать обычный индекс B-дерева.
В любом случае , в документации PostgreSQL есть глава о GIST и одна о GIN, где вы можете найти дополнительную информацию.
И последнее, но не менее важное: лучший способ определить, что лучше всего, - это создать образец данных (столько, сколько вам нужно для реального сценария), а затем создать индекс GIST, измерив, сколько времени требуется для создания индекса, вставки нового значения, выполнения образца запроса. Затем отбросьте индекс и сделайте то же самое с индексом GIN. Сравните значения, и вы получите нужный вам ответ, основанный на ваших данных.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться