Как ускорить работу LIKE в SQL (желательно Postgres) - PullRequest
2 голосов
/ 09 октября 2009

У нас есть база данных Postgres, которая содержит 2 миллиона записей. Мы попытались использовать поиск по равенству, и он работает мгновенно (ВЫБРАТЬ * ОТ ГДЕ b = "asd")

Но мы бы хотели, чтобы операция "LIKE '% asd%'" тоже была быстрой. Как мы это делаем?

Ответы [ 5 ]

3 голосов
/ 09 октября 2009

Как правило, «% что-то%» не индексируется.

Но.

Есть несколько проблем:

  1. Вы абсолютно уверены, что вам нужно полное совпадение подстроки? Возможно, вы могли бы сделать с «любое слово (разделенное пробелами) начинается с чего-то»? - он близок к% что-то% и определенно индексируется.
  2. Возможно, вы захотите использовать полнотекстовый поиск, но он обычно работает со словами, поэтому он еще менее применим к вашему решению, если вам действительно нужен поиск по подстроке.
  3. Вы можете попробовать использовать триграммы для поиска (модуль pg_trgm в contrib)
  4. Вы также можете попробовать wildspeed , но имейте в виду, что создает огромные индексы .
2 голосов
/ 09 октября 2009

Вам нужен полнотекстовый индекс. Это может помочь http://wiki.postgresql.org/wiki/Full_Text_Indexing_with_PostgreSQL

1 голос
/ 09 октября 2009

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

Лично я никогда не позволяю своим пользователям выполнять поиск, не давая мне начала того, что они ищут. В SQL-сервере, если вы должны это сделать, вы можете настроить полнотекстовый поиск, но я не знаю, есть ли у Postgres это.

1 голос
/ 09 октября 2009

Вы не сможете оптимизировать это как есть.

Из-за подстановочного знака на фронте поиска требуется сканирование всей таблицы на наличие совпадений, то есть он не может использовать индексы.

0 голосов
/ 09 октября 2009

Используйте какой-то «полнотекстовый» поисковый индекс, например, PostGres выглядит так, как будто в него встроена поддержка .

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