InnoDB-聚簇索引和MyISAM非聚簇索引

本文介绍了InnoDB的聚簇索引与MyISAM的非聚簇索引的区别。InnoDB的聚簇索引将数据行与B-Tree索引存储在同一结构中,而MyISAM则有独立的行存储。当主键非自增时,InnoDB插入数据可能引发大量磁盘I/O和碎片。MyISAM的索引页存储已排序的列值和行号,数据按插入顺序存储。InnoDB的二级索引存储主键值作为行指针。
摘要由CSDN通过智能技术生成

概述:聚簇索引并不是一种单纯的索引类型,而是一种数据存储方式。因为是存储引擎负责实现索引,因此不是所有的存储引擎都支持聚簇索引(如MyISAM)。如:InnoDB的聚簇索引实际上在同一个结构中保存了B-Tree索引和数据行。

术语:“聚簇”表示数据行和相邻的键值紧凑的存储在一起。因为无法同时把数据行存放在两个不同的地方,所以一个表只能有一个聚簇索引(不过,覆盖索引可以模拟多个聚簇索引的情况)。

当表有聚簇索引时,它的数据行实际上存放在索引的叶子页(leaf page)中。

下图为聚簇索引存放展示:叶子页包含了行的全部数据,但是节点页只包含了索引列(图示中索引列包含的是整数值/主键)

 MyISAM为非聚簇索引,需要独立的行存储(一张表存储到磁盘时三个文件:.frm\.MYD\.MYI),每一个叶子页节点存储的是已经排序的列值(索引列),以及列值对应的行号。

如下图。注意:MyISAM是按照数据插入的书记徐存储数据,大部分情况如行是定长的,行号按插入顺序排列(从0开始)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值