Нечеткий поиск даты / Оптимизация LIKE с типом даты
Что ж, я буду довольно прост - я столкнулся с огромным падением производительности при реализации поиска по дню рождения в моем приложении - я использую LIKE, и это не выражение с привязкой к левому краю (так как формат столбца даты выглядит как YYYY-MM-DD), поэтому Я должен был сделать (%- вэтом месяце- вэтот день), и этот запрос не может использовать индекс по умолчанию.
я нашел pg-trgm
вещь, которая на самом деле довольно классная, но оператор gist/gin_trgm_ops не поддерживает тип date. Вы можете сказать, что нет смысла указывать дату в качестве типа столбца, если я использую LIKE - мне нужно ::varchar
в любом случае, но я хочу установить строгие правила в своей базе данных, поэтому я прошу совета - есть ли способ, как LIKE работать быстрее с датой, или, если есть другие варианты, способ завершить мою задачу (иметь поиск на день рождения) с тем чудовищным временем запроса?
1 ответ
Попробуйте индексировать вот так:
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