PgSQL如何优雅的加模糊查询索引

简介: PgSQL如何优雅的加模糊查询索引

模糊搜索实例


模糊查询sql语句


EXPLAIN ANALYSE SELECT * from tbl_school_info WHERE name like '%清华%'


不加索引的执行效果:


微信图片_20221112111330.jpg

添加索引


  1. 引入索引扩展包


CREATE EXTENSION pg_bigm;
  1. 创建索引
CREATE INDEX school_name_like_index ON tbl_school_info USING gin (name PUBLIC.gin_bigm_ops);


添加索引之后的执行效果:


微信图片_20221112111335.jpg


优化效果


执行速度提高了22倍


总结


由此可见合理添加索引的重要性。


会索引失效的情况:


  1. 任何计算、函数、类型转换
  2. !=
  3. NOT,相当于使用函数
  4. 模糊查询通配符在开头
  5. 索引字段在表中占比较高
  6. 多字段btree索引查询条件不包含第一列
  7. 多字段索引查询条件使用OR(有时也会走索引扫描,但查询效率不高)
  8. 当order by 中的字段出现在where条件中时,才会利用索引而不排序,更准确的说,order by 中的字段在执行计划中利用了索引时,不用排序操作,这个结论不仅对order by有效,对其他需要排序的操作也有效,如group by 、union 、distinct等。这种情景下若要走索引需单独建立一个order by 条件的索引,并删除带order by条件的联合索引,不仅postgresql如此,mysql也会这样。


相关文章
|
7月前
|
关系型数据库 MySQL
9. Mysql 模糊查询和正则表达式
9. Mysql 模糊查询和正则表达式
185 1
|
存储 缓存 关系型数据库
MYSQL的覆盖索引和回表
MYSQL的覆盖索引和回表
127 0
|
SQL 关系型数据库 MySQL
详解MySQL覆盖索引、索引下推
1.覆盖索引 1.1.概述 覆盖索引,是为了避免“回表查询”,从而降低查询耗时的一种使用索引的方法,所以要聊覆盖索引首先我们要知道什么是"回表查询,“回表查询”是因为MySQL的索引结构决定的,是因为非聚集索引要找聚集索引拿数据而出现的现象,所以我们又要先了解MySQL中的聚集索引和非聚集索引。 文章的脉络就是先聊聚集索引、非聚集索引是怎么带来了“回表查询”的问题,然后怎么用用覆盖索引解决这个问题。
1106 0
|
关系型数据库 MySQL 索引
MySQL----前缀索引 & 单列索引与联合索引
MySQL----前缀索引 & 单列索引与联合索引
|
SQL 关系型数据库 MySQL
MySQL复合索引和单列索引的单表查询分析
MySQL复合索引和单列索引的单表查询分析
|
关系型数据库 MySQL 索引
MySQL给某个字段添加索引
MySQL给某个字段添加索引
182 0
MySQL给某个字段添加索引
|
存储 容灾 关系型数据库
Mysql回表与索引覆盖,联合索引问题
Mysql回表与索引覆盖,联合索引问题
143 0
Mysql回表与索引覆盖,联合索引问题
|
关系型数据库 MySQL
MySQL练习2——查询多列
MySQL练习2——查询多列!
|
搜索推荐 关系型数据库 MySQL
正排倒排,并不是 MySQL 的排序的全部!
引言 春节前一个悠闲的上午,小航送了我,一袋坚果,他看我吃的正香,慢慢问道:”温哥,mysql的排序,有什么要注意的吗,不就是正排倒排吗?”
126 0
正排倒排,并不是 MySQL 的排序的全部!