栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mysql的各种索引

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mysql的各种索引

最近在各种文章上都看到了各种各样类型的索引,都快把我搞懵了,什么聚集索引,主键索引,聚簇索引等等,这里来整理一下

主键索引

顾名思义,就是在主键上建立的索引,InnoDB中,主键索引的数据都会存到索引树的叶子结点上,而其他索引的叶子结点存储的都是主键字段的值,因此主键索引也就是聚集索引也就是聚簇索引,因为数据都聚集在叶子节点上。

唯一索引

建立在唯一约束的字段上的索引,唯一索引既可以是主键索引也可以是普通索引。

覆盖索引

覆盖索引指的是要查询的数据列被所建的索引覆盖了,比如说现在有个表,主键是id,有name,age两个字段,在age上建立索引,现在执行这个语句:select id from user where age = 23; 那么就会从age字段上的索引树上找,因为age是普通索引,因此其叶子结点上存储的是主键字段的值,也就是id,因此就可以直接返回,不用回表了。要是执行的是select name from user where age = 23,就会先从age上的索引树出发,先找到age = 23锁对应的id,再去主键索引树上根据这个id找到对应的行记录返回(这就是回表)。

索引下推

以上述例子,主键是id,有name,age两个字段,现在改为,有name,age,phone三个字段,以(name,age)建立联合索引,执行以下语句:select * from user where name like ‘张%’ AND age = 23; 在5.6以前,是这样执行的

需要回表两次
而有了索引下推后,就变成

只需要一次了,这种优化就叫索引下推。

最后

再说说索引失效的几个场景吧:

  1. 在检索条件中没有遵循最左前缀原则,比如联合索引(name,age),而检索条件中只用了age,会导致索引失效。
  2. 在使用like模糊查询时,%放在了前面,比如说name like ‘%某’,也会导致索引失效。
  3. 在where子句中对索引字段进行运算也会导致索引失效。
  4. 在where子句中对索引字段进行函数运算也会导致索引失效。
  5. 在where子句中对索引进行!=或<>的时候有可能会导致无法使用索引
  6. 用or来连接也会导致索引失效
  7. 如果字段类型为int,而检索时加了单引号,则会隐式进行类型转换导致索引失效。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/572512.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号