Нечеткий поиск по дате / Оптимизация LIKE с типом даты - PullRequest
0 голосов
/ 25 сентября 2018

Что ж, я буду довольно прост - я столкнулся с огромным падением производительности при реализации поиска по дню рождения в моем приложении - я использую LIKE, и это не выражение с левой привязкой (так как формат столбца даты выглядит как YYYY-MM-DD), поэтому я должен был сделать (% - в этом месяце - в этот день ), и этот запрос не может использовать индекс по умолчанию.

Я нашел pg-trgm вещь, которая на самом деле довольно крутая, но оператор gist / gin_trgm_ops не поддерживает тип "date".Вы можете сказать, что не имеет смысла указывать дату в качестве типа столбца, если я использую LIKE - мне все равно нужно ::varchar, но я хочу установить строгие правила в своей базе данных, поэтому я прошу совета - есть лиспособ заставить LIKE работать быстрее с датой, или, если есть другие варианты, способ завершить мою задачу (выполнить поиск по дню рождения) с не таким чудовищным временем запроса?

1 Ответ

0 голосов
/ 25 сентября 2018

Попробуйте индексировать так:

create index idx_name on your_table(extract(month from birth_day), extract(day from birth_day));

, а затем запросить пример:

select * from your_table
where
extract(month from birth_day) = 2 and extract(day from birth_day) = 20
...