В документации по триграмме postgres указано:
Модуль pg_trgm предоставляет классы операторов индексов GiST и GIN, которые позволяют вам создавать индекс по текстовому столбцу для этой цели. очень быстрых поисков сходства. Эти типы индексов поддерживают вышеописанные операторы подобия и дополнительно поддерживают поиск индексов на основе триграмм для запросов LIKE, ILIKE, ~ и ~ *.
и показывают следующий пример:
SELECT t, word_similarity('word', t) AS sml
FROM test_trgm
WHERE 'word' <% t
ORDER BY sml DESC, t;
Круто!
Однако при выполнении следующего запроса:
SELECT *
FROM place
WHERE word_similarity(place.name, '__SOME_STRING__') > 0.5
Созданный индекс не используется.
Однако при использовании операторов ILIKE
или %>
создается впечатление, что индекс используется. Почему индекс не используется в функции word_similarity
?