Включение нескольких полей в индекс таблицы Postgres - PullRequest
0 голосов
/ 09 марта 2011

Я использую Postgres 8.4 и выполняю поиск, используя ILIKE. Поскольку я ищу в 4 столбцах (содержащих текст) из этой таблицы, мне было интересно, можно ли создать единый индекс для всех 4 столбцов, а не индекс для каждого столбца.

Спасибо.

1 Ответ

1 голос
/ 09 марта 2011

Это немного сложная тема.В общем случае базы данных не будут оптимизировать запрос LIKE, если он не привязан к началу.Если вы выполняете поиск по 4 столбцам, то, скорее всего, это не так.

http://www.postgresql.org/docs/8.4/static/indexes-types.html

Оптимизатор также может использовать индекс B-дерева для запросов, связанных с сопоставлением с шаблоном.операторы LIKE и ~, если шаблон является константой и привязан к началу строки - например, col LIKE 'foo%' или col ~ '^ foo', но не col LIKE '% bar'.Однако, если ваша база данных не использует локаль C, вам нужно будет создать индекс со специальным классом операторов для поддержки индексации запросов на сопоставление с образцом;см. раздел 11.9 ниже.Также возможно использовать индексы B-дерева для ILIKE и ~ *, но только если шаблон начинается с не алфавитных символов, т. Е. Символов, на которые не влияет преобразование в верхний / нижний регистр.

Вы можете рассмотреть полнотекстовую поддержку в postgresql, если вы делаете запросы на естественном языке (например, поисковую систему) ...

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