【问题标题】:Fuzzy date search/Optimizing LIKE with date type模糊日期搜索/使用日期类型优化 LIKE
【发布时间】:2018-09-25 20:00:54
【问题描述】:

好吧,我会非常直截了当 - 在我的应用程序中实现生日搜索时,我遇到了巨大的性能下降 - 我使用的是 LIKE,这不是左锚表达式(因为日期列格式看起来像 YYYY-MM-DD ),所以我不得不做 (%-本月-今天),而且这个查询不能使用默认索引。

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

【问题讨论】:

    标签: sql postgresql pg-trgm


    【解决方案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
    

    【讨论】:

    • 请同时说明查询应该如何使用索引。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 1970-01-01
    • 2017-01-07
    • 2015-03-08
    • 2021-03-17
    • 2011-05-13
    相关资源
    最近更新 更多