首页 > 数据库 >MySQL索引使用注意事项

MySQL索引使用注意事项

时间:2023-01-25 17:32:20浏览次数:53  
标签:覆盖 下推 查询 索引 注意事项 MySQL 失效 主键

数据库索引可以提高搜索效率,在创建数据库的时候,就要考虑到,针对哪个业务字段添加什么样的索引,可以提高数据的查询效率。所以,索引在数据库是有很重要的位置的。今天就来学习一下Mysql 索引有什么需要注意的事项。

从三个维度来分析这个问题:

1.索引哪些情况会失效

2.索引不适合哪些场景

3.索引的一些规则特性

索引哪些情况会失效

查询条件包含or,可能会导致索引失效

如果字段类型是字符串,where时一定要用引号括起来,否则索引失效

like 通配符可能导致索引失效

联合索引,查询时的条件列不是联合索引中的第一个列,否则索引失效

在索引列上使用myql内置函数,索引失效

对索引列运算(如 + - * /),索引失效

索引字段上使用(!= 或者<> ,not in) 时,可能会导致索引失效。

索引字段上使用is null,is not null,可能导致索引失效

左连接查询或者右连接查询关联的字段编码格式不一样,可能导致索引失效

mysql 估计使用全表扫描要比使用索引快,则不使用索引

索引不适用场景

数据量少的不适合加索引

更新比较频繁也不适合加索引

区分度低的不适合加索引(如性别)

索引的一些潜规则

覆盖索引

回表

索引数据结构(B+树)

最左前缀原则

索引下推

覆盖索引

聚集索引:聚集索引,也叫主键索引,,就是根据数据库的主键构建一棵B+树,同时叶子节点存放的就是整张表的记录数据

聚集索引的叶子节点成为数据叶,聚集索引的特性决定了索引组织表中的数据也是索引的一部分

非主键索引,,辅助索引,二级索引  叶子节点 = 键值 + 书签

InnoDb存储引擎 的书签就是相应行数据的主键索引值

索引是高效找到行的一个方法,当能通过检索索引就可以读取想要的数据,那就不需要再到数据表读取行了。如果一个索引包含了(或覆盖了) 满足查询语句中字段与条件的数据叫做覆盖索引。

不是所有类型的索引都可以成为覆盖索引。覆盖索引必须要存储索引的列,而哈希索引、空间索引和全文索引等都不存储索引列的值,索引MySQL只能使用B-tree 索引做覆盖索引,sql 语句只通过索引,就取到了所需要的数据,这个过程就叫做索引覆盖

索引下推

MysQL 5.6 引入,index condition pushdown,ICP  ,有效减少了回表次数,提高了查询效率。

索引下推推出以后,优化器就多了一个选择,就是让存储引擎逐个扫描,筛选出符合数据,这样最终只得到一个数据,只需要回表一次总结下来就是,索引下推逐个扫描并筛选数据花费的时间 < 索引下推减少的回表次数从而节省的时间,即后者时间-前者时间>0,那么就会使用索引下推来优化查询性能

闲抄一下最左匹配原则:

顾名思义:最左优先,以最左边的为起点任何连续的索引都能匹配上,同时遇到范围查询(>,<,between,like)就会停止查询



标签:覆盖,下推,查询,索引,注意事项,MySQL,失效,主键
From: https://blog.51cto.com/u_13271983/6022700

相关文章