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/
版权声明:本博客文章均系本人原创,转载请注名出处