索引的概念和理解

索引是什么

索引是帮助mysql高速查询数据的排好序的数据结构。一般使用的是一种特殊的B+树,还可以使用HasH树

索引能干什么和为什么要使用

索引用于快速查找具有特定列值的行。如果没有索引,mysql必须从第一行开始扫描查找,然后全表扫描来查找到
所有需要的值。表越大,需要花费越大,磁盘io越多,速度越慢。如果通过索引查找可以快速定位到需要查找的数据
,而不需全部扫描。

索引结构

MyISAM

MyISAM的存储结构分为 .frm用于存储表结构、.MYD用于存储数据、.MYI用于存储索引
myisam表的存储文件
图片最初来源于网上
myisam的索引和数据时存储到不同的文件中的,属性非聚簇索引。主键索引和普通索引可以说是没有什么区别的,要说有区别,也就是主键索引肯定不可为null,数据不可重复,可以实现主键自增。
索引树非叶子结点只存放索引值,叶子结点存储包含了索引对应数据的行的地址
执行流程是先在索引树快速扫描到行的地址,然后直接通过扫描到的地址去数据文件(.MYI)中直接定位到需要的行,不需要逐行扫描,大大提高了查询速度。

InnoDB

InnodDB存储结构包含.frm文件用于存储表结构和.ibd文件用于存储索引和数据
innodb数据结构
InnoDB的索引和数据是存储到一个文件中,而且表数据在主键索引树上,所以innodb的索引属于聚簇索引

主键索引

主键索引非叶子结点只保存了主键,叶子结点是对应主键的数据行。
主键索引结构,图来源网上截图

普通索引树结构

普通索引树,非叶子结点只保存普通索引值,而叶子结点上保存了普通索引和对应的主键

普通索引树结构,图还是来源于网上
普通索引执行流程:先扫描普通索引树,找到对应的主键,然后去主键索引树中扫描对应的数据

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值