Postgres, такие как индексирование фильтров и производительность с% wildcard% - PullRequest
0 голосов
/ 28 января 2019

У меня есть сценарий, согласно которому я должен выполнить полнотекстовый поиск в базе данных на основе предоставленных параметров.Скажем, если first_name при условии, что я выполняю только запрос:

where(unaccent(first_name) ilike %{params[:first_name]}%

, если last_name предоставил только этот:

where(unaccent(last_name) ilike %{params[:last_name]}%

И если оба предоставлены, то я делаю:

where(unaccent(first_name) ilike %{params[:first_name]}% AND 
where(unaccent(last_name) ilike %{params[:last_name]}%

Обратите внимание, что есть еще 3 поля, как это.

Я знаю, что могу добавить GIN индексы длякаждое из этих полей и использовать его довольно быстро, но это определенно увеличит объем памяти и замедлит другие операции, так что я не очень большой поклонник этого.

Есть ли совет, как сделать это быстрее ивполне оптимизирован, но не замедляет работу других частей.

...