生产问题:业务表中某一字段创建了索引,但在模糊查询执行时无法命中索引,导致慢查询。
CREATE INDEX lab_report_report_name_index ON lab.lab_report (report_name);
原因:在pgsql中,对于需要需要模糊查询的字段创建索引,要指定操作符。
查阅文档后发现,pgsql可以在Btree索引上指定操作符:text_pattern_ops、varchar_pattern_ops和 bpchar_pattern_ops,它们分别对应字段类型text、varchar和 char,官方解释为“它们与默认操作符类的区别是值的比较是严格按照字符进行而不是根据区域相关的排序规则。这使得这些操作符类适合于当一个数据库没有使用标准“C”区域时被使用在涉及模式匹配表达式(LIKE或POSIX正则表达式)的查询中。”
CREATE INDEX lab_report_report_name_index ON lab.lab_report (report_name varchar_pattern_ops);
解决问题!!!