Database-MySQL 索引存储引擎 MyISAM

MySQL 索引存储引擎 MyISAM

索引存储引擎

MyISAM

B+ Tree 叶节点的 data 域存放的是数据的磁盘地址,被称为“非聚簇索引”

  • 索引文件和数据文件是分离的
    • 表 user 的索引存储在索引文件 user.MYI 中
    • 表 user 数据存储在数据文件 user.MYD 中

检索流程

  1. 在索引检索的时候,首先按照 B+ Tree 搜索算法搜索索引
    如果使用 MyISAM 存储引擎在查询时,会将索引节点缓存在 MySQL 缓存中,而数据缓存依赖于操作系统自身的缓存
  2. 如果指定的 Key 存在,则根据 data 域中磁盘地址到磁盘中寻址定位到对应的磁盘块
  3. 读取相应的数据记录

举例:

1
2
3
4
5
6
7
8
9
10
CREATE TABLE `user`
(
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(20) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_age` (`age`) USING BTREE
) ENGINE = MyISAM
AUTO_INCREMENT = 1
DEFAULT CHARSET = utf8;

磁盘IO次数:4次索引检索+1次记录数据检索

Database-Index-MyISAM

辅助索引

  • 在 MyISAM 存储引擎中,辅助索引和主键索引的结构是一样的,没有任何区别
    • 叶子节点中data阈存储的都是行记录的磁盘地址
  • 主键列索引的键值是唯一的,而辅助索引的键值是可以重复的
    • 查询数据时,由于辅助索引的键值不唯一,可能存在多个拥有相同的记录,所以即使是等值查询,也需要按照范围查询的方式在辅助索引树种检索数据