1. 存储引擎索引结构深度解析
MySQL数据库中最常用的两种存储引擎MyISAM和InnoDB虽然都采用B+树作为索引结构,但在具体实现上存在诸多关键差异。这些差异直接影响着数据库的查询性能、事务支持和存储效率。
1.1 B+树基础结构共性
两种引擎的B+树都具备以下特征:
- 多路平衡搜索树结构,保持O(log n)查询复杂度
- 非叶子节点仅存储键值不存数据
- 叶子节点通过指针连接形成有序链表
- 所有数据查询都要走到叶子节点
注意:虽然数据结构相同,但物理存储方式和数据组织逻辑存在本质区别
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. MyISAM索引实现特点
2.1 非聚簇索引设计
MyISAM采用典型的非聚簇索引结构:
- 索引文件(.MYI)与数据文件(.MYD)物理分离
- B+树叶子节点存储的是数据记录的物理地址(行号)
- 通过地址指针二次访问数据文件获取完整记录
sql复制-- MyISAM表创建示例
CREATE TABLE myisam_table (
id INT PRIMARY KEY,
name VARCHAR(20)
) ENGINE=MyISAM;
2.2 主键与二级索引关系
- 主键索引和二级索引结构完全相同
- 都存储指向数据行的物理指针
- 二级索引查询需要两次IO(索引树+数据文件)
2.3 典型使用场景
- 读密集型应用(数据仓库、报表系统)
- 不需要事务支持的场景
- 表级锁可接受的业务
3. InnoDB索引实现特点
3.1 聚簇索引设计
InnoDB采用聚簇索引结构:
- 主键索引的叶子节点直接存储完整数据行
- 数据文件本身就是主键索引的B+树
- 二级索引存储的是主键值而非物理地址
sql复制-- InnoDB表创建示例
CREATE TABLE innodb_table (
id INT PRIMARY KEY,
name VARCHAR(20)
) ENGINE=InnoDB;
3.2 主键与二级索引差异
| 索引类型 | 存储内容 | 查询路径 |
|---|---|---|
| 主键索引 | 完整数据行 | 一次IO |
| 二级索引 | 主 |
