PostgreSQL优化SQL like '%%'
先写怎么实现,原理再议(弱鸡的我目前还没搞懂):
简单原理是:一般数据库像like’%%‘不一定支持使用索引,但是postgresql的gin + gp_trgm支持like’%%'使用索引。但是gin 索引也有弊端,以下情况可能导致无法命中:
- 搜索字段少于3个字符时,不会命中索引,这是gin自身机制导致。
- 当搜索字段过长时,比如email检索,可能也不会命中索引,造成原因暂时未知。
使用:
创建扩展:CREATE EXTENSION pg_trgm;
创建索引:create index 索引名称 on 表名using gin (字段名 gin_trgm_ops);