Ускорит ли добавление полнотекстового индекса в PostgreSQL мои обычные запросы, использующие LIKE? - PullRequest
5 голосов
/ 23 марта 2012

Если я добавлю полнотекстовый индекс в PostgreSQL, будут ли мои запросы LIKE и ILIKE использовать его автоматически?

Нужно ли использовать специальный полнотекстовый синтаксис, чтобы использовать преимущества полнотекстового индекса в PostgreSQL:

SELECT title, ts_headline(body, query) AS snippet, ts_rank_cd(body_tsv, query, 32) AS rank
  FROM blog_entry, plainto_tsquery('hello world') AS query
  WHERE body_tsv @@ query
  ORDER BY rank DESC;

Ответы [ 2 ]

7 голосов
/ 23 марта 2012

Нет, полнотекстовый индекс не будет использоваться оператором LIKE.

С PostgreSQL 9.1 вы можете создать новый тип индекса, который ускорит операции LIKE, даже если подстановочный знак находится не только в конце выражения

http://www.depesz.com/2011/02/19/waiting-for-9-1-faster-likeilike/

5 голосов
/ 23 марта 2012

Чтобы расширить ответ ahwnn, они представляют собой различные сравнения и не могут использовать один и тот же индекс.

Полнотекстовый поиск всегда включает в себя токенизацию текста и, как правило, включает в себя слова на основе.Это затрудняет поиск точных префиксов и, как правило, не позволяет, например, сопоставить два пробела подряд (они обычно просто отбрасываются).

Возможно, вы захотите прочитать и о различных классах операторов индекса, в частностиtext_pattern_ops и друзья.Без этого LIKE 'cab%' нельзя оптимизировать до> = 'cab' AND <'cac'. </p>

http://www.postgresql.org/docs/9.1/static/indexes-opclass.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...