好吧,我会很简单-在我的应用中实施生日搜索时遇到了巨大的性能下降-我使用的是LIKE,但这不是左锚表达式(因为日期列格式看起来像YYYY-MM-DD ),因此我不得不这样做(%-本月-这一天),并且此查询无法使用默认索引。
我发现了pg-trgm
东西,它实际上很棒,但是gist / gin_trgm_ops运算符不支持“日期”类型。您可能会说,如果我使用LIKE,将日期作为列类型是没有意义的-无论如何我都必须::varchar
,但我希望在数据库中设置严格的内容,所以我想请教一下-是有什么方法可以让LIKE在日期上更快地工作,或者,如果还有其他选择,可以用没有那么麻烦的查询时间来完成我的任务(进行生日搜索)?
答案 0 :(得分: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