PostgreSQL中varchar类型支持like查询索引
条评论之前在使用PostgreSQL中的varchar类型时想当然的以为用最基本的索引创建语句创建的索引,就支持like查询的。
类似这句:
CREATE INDEX log_action_v_uri_index ON log_action (v_uri); |
但是看过explain才知道,单凭这样的索引,在like搜索的时候,仍然是顺序全表扫描,如图:
后来google了一下解决方案,原来是创建索引的时候追加一下参数,应该这么创建
CREATE INDEX log_action_v_uri_index ON log_action (v_uri varchar_pattern_ops); |
然后对同样的语句再次explain结果如下:
可以看到,已经命中索引了。
这其中涉及到一个重要的知识点,就是PostgreSQL的索引操作符类 ,其标准语法为
CREATE INDEX name ON table (column opclass [sort options] [, ...]); |
这个opclass可以针对不同的数据类型和查询方式提供多种多样的方案,
可以看到光btree索引有关的操作符类就非常多,有些is_default是true也就是正好列类型吻合的话,这个操作符类就不要特意说明了。而varchar或者text的默认用的是text_ops,它支持的查询方式仅有
所以想用模糊查询的话,还是得用text_pattern_ops或者varchar_pattern_ops(这哥俩是一个东西),它支持正则模糊匹配,也支持like %的方式
- 更多信息,可以查看官方文档操作符类和操作符族
本文标题:PostgreSQL中varchar类型支持like查询索引
文章作者:牧云踏歌
发布时间:2018-08-01
最后更新:2018-08-01
原始链接:http://www.kankanzhijian.com/2018/08/01/PostgreSQL_select_varchar_like_index/
版权声明:本博客文章均系本人原创,转载请注名出处