加入收藏 | 设为首页 | 会员中心 | 我要投稿 惠州站长网 (https://www.0752zz.com.cn/)- 办公协同、云通信、物联设备、操作系统、高性能计算!
当前位置: 首页 > 建站 > 正文

一步一步带你入门MySQL中的索引和锁

发布时间:2019-11-05 18:40:31 所属栏目:建站 来源:佚名
导读:副标题#e# 索引 索引常见的几种类型 索引常见的类型有哈希索引,有序数组索引,二叉树索引,跳表等等。本文主要探讨 MySQL 的默认存储引擎 InnoDB 的索引结构。 InnoDB的索引结构 在InnoDB中是通过一种多路搜索树B+树实现索引结构的。在B+树中是只有叶子结

当然最左匹配原则还有这些规则

  •  全值匹配的时候优化器会改变顺序,也就是说你全值匹配时的顺序和原先的联合索引顺序不一致没有关系,优化器会帮你调好。
  •  索引匹配从最左边的地方开始,如果没有则会进行全表扫描,比如你设计了一个(a,b,c)的联合索引,然后你可以使用(a),(a,b),(a,b,c) 而你使用 (b),(b,c),(c)就用不到索引了。
  •  遇到范围匹配会取消索引。比如这个时候你进行一个这样的 select 操作 
  1. select * from stu where class > 100 and name = '张三'; 

这个时候 InnoDB 就会放弃索引而进行全表扫描,因为这个时候 InnoDB 会不知道怎么进行遍历索引,所以进行全表扫描。

索引下推

我给你挖了个坑。刚刚的操作在 MySQL5.6 版本以前是需要进行回表的,但是5.6之后的版本做了一个叫 索引下推 的优化。

  1. select * from stu where class > 100 and name = '张三'; 

如何优化的呢?因为刚刚的最左匹配原则我们放弃了索引,后面我们紧接着会通过回表进行判断 name,这个时候我们所要做的操作应该是这样的

一步一步带你入门MySQL中的索引和锁

但是有了索引下推之后就变成这样了,此时 "李四" 和 "小明" 这两个不会再进行回表。

一步一步带你入门MySQL中的索引和锁

因为这里匹配了后面的name = 张三,也就是说,如果最左匹配原则因为范围查询终止了,InnoDB还是会索引下推来优化性能。

一些实践

哪些情况需要创建索引?

  •  频繁作为查询条件的字段应创建索引。
  •  多表关联查询的时候,关联字段应该创建索引。
  •  查询中的排序字段,应该创建索引。
  •  统计或者分组字段需要创建索引。

哪些情况不需要创建索引

  • 表记录少。
  •  经常增删改查的表。
  •  频繁更新的字段。
  •  where 条件使用不高的字段。
  •  字段很大的时候。

其他

  •  尽量选择区分度高的列作为索引。
  •  不要对索引进行一些函数操作,还应注意隐式的类型转换和字符编码转换。
  •  尽可能的扩展索引,不要新建立索引。比如表中已经有了a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可。
  •  多考虑覆盖索引,索引下推,最左匹配。

全局锁

(编辑:惠州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读