博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL 索引选择原则分析(一)
阅读量:5936 次
发布时间:2019-06-19

本文共 1255 字,大约阅读时间需要 4 分钟。

hot3.png

目的

         数据库中很重要的设计一部分,莫过于索引了。B+树索引是MySQL中设计的索引。B+树索引是基于B+树基础发展而来的。

         然而,在理解了B+树索引结构以后,对优化SQL会事。还针对前面文章做进一步分析。

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+树的高度 聚集索引 辅助索引
1 160(16K/100) 500(16K/40)
2 25600 250000
3 4096000 125000000
4 655360000 62500000000

同样的高度下辅助索引能存放更多的记录。

1:(主键查询)

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的索引。

转载于:https://my.oschina.net/u/1269959/blog/516202

你可能感兴趣的文章
C语言运算符优先级相关问题
查看>>
MP4视频播放器代码
查看>>
Nginx 匹配 iphone Android 微信
查看>>
MFC_Combo_Box(组合框)控件的用法
查看>>
ldap
查看>>
我的友情链接
查看>>
CentOS 7更改网卡名称
查看>>
Yum软件仓库配置
查看>>
linux 压缩与解压总结
查看>>
mysql脚本1064 - You have an error in your SQL syntax; check the manual
查看>>
nessus 本地扫描(一)
查看>>
linux服务器磁盘陈列
查看>>
交换机配置模式
查看>>
python----tcp/ip http
查看>>
我的友情链接
查看>>
第一本docker书学习笔记1-3章
查看>>
一個典型僵尸網絡淺析
查看>>
vmware克隆Centos6.4虚拟机网卡无法启动问题
查看>>
dba学习
查看>>
asterisk配置
查看>>