Вопрос

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

  • Поиск по индексу GIN происходит примерно в три раза быстрее, чем GiST.
  • Для построения индексов GIN требуется примерно в три раза больше времени, чем для индексов GiST.
  • Индексы GIN обновляются примерно в десять раз медленнее, чем индексы GiST.
  • Индексы GIN в два-три раза больше, чем GiST.

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

Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top