您的位置:首页 > 数据库 > MySQL

MySQL 索引选择原则分析(一)

2015-10-13 00:00 591 查看
摘要: B+树索引原理及设计分析

目的
数据库中很重要的设计一部分,莫过于索引了。B+树索引是MySQL中设计的索引。B+树索引是基于B+树基础发展而来的。
然而,在理解了B+树索引结构以后,对优化SQL会事半功倍。还针对前面MySQL索引选择规则文章做进一步分析。
1:B+树与B+树索引区别
B+树B+树索引
存储位置内存磁盘
扇出率
并发控制可以不考虑需要考虑
分裂方向不需要考虑向左、向右
上图中列出两者的区别,光看图片可能不能理解每个区别对应的含义。

下面就来分析一下重要的区别:

1.1:存储位置:

B+树是为磁盘或其他直接存取辅助设备而设计的一种平衡查找树,因此主要操作是计算不需要文件来存储,也就是在内存来操作的。

B+树索引是基于磁盘,因此数据库会出现索引文件,索引文件就是存储在磁盘上的。

1.2:分裂方向

B+树是内存结构,不需要考虑页分裂的方向。

B+树索引在磁盘上,为了充分利用磁盘的顺序特性,还需要根据不同插入情况考虑不同的分裂点记录以及分裂的方向。

2:MySQL的InnoDB存储引擎的索引设计

InnoDB存储引擎将B+树索引分为聚集索引和辅助索引。

聚集索引是通过将表的主键作为键值来构造B+树。如果没有显示创建,自动创建一个6字节的主键。聚集索引还包含记录所有列信息。

2.1:存储结构

聚集索引的非叶子点存放的是<键值, 地址>,地址为指向下一层的指针。叶子点存放的是<记录信息>。

辅助索引的非叶子点存放的是<键值,主键值, 地址>,叶子点存放的是<主键>。

2.2:查询方式

MySQL通过辅助索引查询数据时,只是查询出主键值,再通过主键查询聚集索引,最后确定记录信息。

2.3:记录数量

通常辅助索引比聚集索引的高度要小。如记录的长度为100字节,辅助索引记录的长度为40字节,对比后的结果为:

B+树的高度聚集索引辅助索引
1160(16K/100)500(16K/40)
225600250000
34096000125000000
465536000062500000000
同样的高度下辅助索引能存放更多的记录。

1:MySQL索引选择规则(主键查询)

students_origin表中只有主键,因此执行计划使用主键查询id信息。

studentns表中有多个索引。

查询结果只有主键一个字段,再根据2.1来分析,主键其实存放在辅助索引里面的。

根据2.3来分析,假如辅助索引"idx_rank"只有一个页(MySQL最小单位)存储了所有记录数,辅助索引"idx_major"有两个页存储了所有记录数,辅助索引"idx_rank_total"有三个页存储了所有记录数,聚集索引需要四个页存储了所有记录数,如果每次IO只能读取一个页信息。"idx_rank"一次IO,"idx_major"两次IO,"idx_rank_total"三次IO,聚集索引要四次IO。

结论,选择最少那次IO的索引。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: