Нечеткий поиск даты / Оптимизация 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
Другие вопросы по тегам