Mysql 索引介绍及原理(二)索引的原理和存储结构

目标:

  • 掌握索引、分类、优劣势 

  • 使用命令创建、查看、删除索引 

  • 理解索引的原理和存储结构


索引存储结构

 

  • 索引是在存储引擎中实现的,也就是说不同的存储引擎,会使用不同的索引

  • MyISAM和InnoDB存储引擎:只支持B+ TREE索引, 也就是说默认使用BTREE,不能够更换

  • MEMORY/HEAP存储引擎:支持HASH和BTREE索引

B树和B+树

     数据结构示例网站:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
B树图示

  • B树是为了磁盘或其它存储设备而设计的一种多叉(下面你会看到,相对于二叉,B树每个内结点有多个分支,即多叉)平衡查找树。 多叉平衡树
  • B树的高度一般都是在2-4这个高度,树的高度直接影响IO读写的次数。
  • 如果是三层树结构---支撑的数据可以达到20G,如果是四层树结构---支撑的数据可以达到几十T

B+树图示

B和B+树的区别

  • B树和B+树的最大区别在于非叶子节点是否存储数据的问题。
  • B树是非叶子节点和叶子节点都会存储数据。
  • B+树只有叶子节点才会存储数据,而且存储的数据都是在一行上,而且这些数据都是有指针指向的,也就是有顺序的。

聚集索引和非聚集索引区别

  • 聚集还是非聚集指的是 B+Tree 叶节点存的是指针还是数据记录
  • MyISAM 索引和数据分离,使用的是非聚集索引
  • InnoDB 数据文件就是索引文件,主键索引就是聚集索引

对比如下:

聚集索引

非聚集索引

辅助索引

辅助索引存储的是主键索引的主键值,不是地址值。

 结论:

1、MySQL非主键查询,则需要搜索两次索引树(一次是辅助索引树,一次是主键索引树),最终取出数据。如下示例

select * from t where id=15
select * from t where name='Alice

从辅助索引树上找到主键后,再在主键索引树下找到数据 我们称为回表。

select name from t where name='Alice' 给name做了索引
select id,name from t where name='Alice' 覆盖索引
select * from t where name='Alice' ?

形成索引树:利用组合索引 完成覆盖索引(利用组合索引完成在辅助索引树的遍历,不回表)
 

2、 MySQL表设计需要创建主键ID,如果未创建建主键,则MySQL会找唯一字段 当主键,没有唯一字段则MySQL自动生成伪列 当主键。

3、创建主键方案:使用连续自增主键,不要用大字符串比如 uuid作为主键,推荐雪花算法 snowflakes。
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仰望星空@脚踏实地

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值