2011-03-09 3 views
0

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

спасибо.

ответ

1

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

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

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

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

+0

Или ждать für 9.1, который будет в состоянии использовать индекс для LIKE и ILIKE : http://www.depesz.com/index.php/2011/02/19/waiting-for-9-1-faster-likeilike/ –

Смежные вопросы