Mysql索引

本文详细介绍了MySQL中索引的概念,包括其数据结构B+Tree,以及两种主要的索引类型——聚集索引和非聚集索引。探讨了MyISAM和InnoDB存储引擎的区别,特别是InnoDB为何需要主键及其推荐使用整型自增主键的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、索引定义:是一种帮助mysql高效获取数据的数据结构。

使用用户任意指定的字段对数据进行排序的一种数据结构。

2、mysql索引使用的数据结构:B+Tree

3、索引分类:

聚集索引:叶节点包含了完整的数据记录(索引与数据行存在一起)。
非聚集索引:索引与数据行分开存放。
存储引擎是表维度上的概念。一个数据库可以创建不同存储引擎的数据表。

3.1 myisam存储引擎(非聚簇索引):索引文件和数据文件分离。

data目录下以.frm 、.MYD、.MYI结尾的三个文件。
.frm:表的表结构。
.MYD:表的数据记录(表的数据行)。
.MYI:表的索引。
查找过程:根据myi文件中索引找到数据在myd文件中的位置(B+tree的叶节点存储了数据的位置)。
3.2

innodb存储引擎(聚簇)(支持事务):

data目录下以.frm和.ibd(index、data)结尾的两个文件。
ibd文件存储了索引和数据。该存储引擎要求存储数据文件时就是以B+Tree存储的。
表数据文件本身就是按B+Tree组织的一个索引结构文件。
与myi比少了一次磁盘I/O。
问题:为什么innoDB必须有主键?为什么推荐使用整型的自增主键。
答:必须有一个B+Tree来组织数据文件。如果不指定主键,mysql也会自动生成一个主键(使用唯一列或自动加一列)。
整型所占用的存储空间较小,而且整型数据容易做比较(检索)。
使用自增主键更便于插入,避免或减少了B+Tree的调整。

聚集索引就是数据的物理存储顺序与列顺序一致。通俗讲就是物理上在前面的在表中也位于前面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值