Не мисля, че бих могъл да го обясня по-добре от ръководството, което вече го прави:
Когато избирате кой тип индекс да използвате, GiST или GIN, вземете предвид тези разлики в производителността:
Проверките на GIN индекс са около три пъти по-бързи от GiST
Изграждането на GIN индекси отнема около три пъти повече време, отколкото GiST
GIN индексите са умерено по-бавни за актуализиране от GiST индексите, но около 10 пъти по-бавни, ако поддръжката за бързо актуализиране е била деактивирана [...]
GIN индексите са два до три пъти по-големи от индексите GiST
Връзка и цитат се отнасят до ръководството за Postgres 9.4. Оценките за размера и производителността вече изглеждаха леко остарели. С Postgres 9.4 шансовете се изместиха значително в полза на GIN .
Бележките по версията на Postgres 9.4 включват:
Намалете размера на индекса GIN (Александър Коротков, Хейки Линакангас) [...]
Подобрете скоростта на GIN търсене с няколко клавиша (Александър Коротков, HeikkiLinnakangas)
Оттогава оценките за размер и ефективност са премахнати от ръководството.
Имайте предвид, че има специални случаи на употреба, които изискват едното или другото.
Едно нещо, което не сте разбрали:Виеникогате получавате грешни резултати с индекс GiST. Индексът работи с хеш стойности, които може водят до фалшиви положителни резултати в индекса. Това трябва да стане релевантно само с много голям брой различни думи във вашите документи. Във всеки случай фалшивите положителни резултати се елиминират след повторна проверка на действителния ред. Ръководството:
GiST индексът е със загуба, което означава, че индексът може да генерира фалшиви съвпадения и е необходимо да се провери действителният ред на таблицата, за да се елиминират такива фалшиви съвпадения. (PostgreSQL прави това автоматично, когато е необходимо. )
Удебелен акцент мой.