一文搞懂MySQL索引(实现原理加优化实战,面试必问)

前言

本篇文章从数据结构,B+Tree的构建过程,MySQL索引实现,索引为什么那么快,MySQL有哪些索引,聚集索引和二级索引的区别,索引失效的原因,EXPLAIN关键字分析,索引实战,索引的优缺点,什么时候应该加索引,全方面帮助读者理解MySQL索引。

一、提出问题

  1. MySQL索引有哪些实现方式
  2. 什么是B+Tree索引,B+Tree索引的构建过程,跟二叉树、红黑树的对比
  3. 为什么数据库存储用B+tree索引,局部性原理是什么,为什么推荐自增id
  4. MySQL有哪些索引,聚集索引,二级索引,覆盖索引区别,回表是什么
  5. 怎么加索引,索引的使用场景有哪些,加索引一定好吗
  6. 索引失效的场景,引发什么后果
  7. EXPLAIN关键字查看MySQL是否使用索引
  8. 慢查询优化

接下来会循序渐进,让读者完全搞懂索引是什么

二、MySQL索引有哪些实现方式

MySQL索引实现方式有:B+tree索引、Hash索引、Full-text索引。

我们最常用的是B+tree索引,主键索引(也叫聚簇索引)本身就是一个B+tree索引树,非叶子节点存储主键id,叶子节点为一整行数据,叶子节点之间通过双向链表连接支持范围扫描,一般加的唯一索引,普通索引都是B+tree索引。

Hash索引只能在memory存储引擎下使用,这里不过多描述,优点是查询快,hash取模O(1)检索,缺点不支持范围查询,出现hash冲突性能会降低。

Full-text索引主要对varchar,text加索引,使用倒排索引的方式,与搜索引擎实现方式相似。

三、为什么使用B+tree索引

先说结论,主要因为磁盘读写速度远远低于内存速度,传统的机械硬盘大概慢一万倍,固态硬盘慢100倍,故减少磁盘I/O次数是提升索引性能的重点。

根据局部性原理和磁盘预读,Linux操作系统进行磁盘I/O时,一般顺序读写4KB到内存的Page Cache中,之后再在内存中找到对应的数据返回回去,Mysql的B+tree每个节点为16KB,我们可以把16kb当作磁盘IO的最小单元。

局部性原理表现为:时间局部性和空间局部性。时间局部性是指如果程序中的某条指令一旦执行,则不久之后该指令可能再次被执行;如果某数据被访问,则不久之后该数据可能再次被访问。空间局部性是

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值