0

好吧,我会很简单——在我的应用程序中实现生日搜索时,我遇到了巨大的性能下降——我使用的是 LIKE,这不是左锚表达式(因为日期列格式看起来像 YYYY-MM-DD),所以我必须这样做(%-本月-本日),并且此查询不能使用默认索引。

我发现了pg-trgm东西,这实际上非常棒,但是 gist/gin_trgm_ops 运算符不支持“日期”类型。您可能会说,如果我使用 LIKE,将日期作为列类型是没有意义的 -::varchar无论如何我都必须这样做,但我希望在我的数据库中设置严格,所以我正在征求意见 - 有没有办法LIKE 使用日期更快地工作,或者,如果有其他选项,如何在没有那么长的查询时间的情况下完成我的任务(进行生日搜索)?

4

1 回答 1

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
于 2018-09-25T20:06:14.820 回答