模糊搜索实例
模糊查询sql语句
EXPLAIN ANALYSE SELECT * from tbl_school_info WHERE name like '%清华%'
不加索引的执行效果:
添加索引
- 引入索引扩展包
CREATE EXTENSION pg_bigm;
- 创建索引
CREATE INDEX school_name_like_index ON tbl_school_info USING gin (name PUBLIC.gin_bigm_ops);
添加索引之后的执行效果:
优化效果
执行速度提高了22倍
总结
由此可见合理添加索引的重要性。
会索引失效的情况:
- 任何计算、函数、类型转换
- !=
- NOT,相当于使用函数
- 模糊查询通配符在开头
- 索引字段在表中占比较高
- 多字段btree索引查询条件不包含第一列
- 多字段索引查询条件使用OR(有时也会走索引扫描,但查询效率不高)
- 当order by 中的字段出现在where条件中时,才会利用索引而不排序,更准确的说,order by 中的字段在执行计划中利用了索引时,不用排序操作,这个结论不仅对order by有效,对其他需要排序的操作也有效,如group by 、union 、distinct等。这种情景下若要走索引需单独建立一个order by 条件的索引,并删除带order by条件的联合索引,不仅postgresql如此,mysql也会这样。