赞
踩
B+Tree索引
B+树是由二叉查找树、平衡二叉树(AVLTree)和平衡多路查找树(B-Tree)逐步优化而来。
二叉查找树的任意一个节点,其左子树的每个节点的值都要小于这个节点的值,而右子树节点的值都应大于这个节点的值。
这种结构有利于快速查找一个数据。
平衡二叉树(AVL树)在符合二叉查找树的条件下,还满足任何节点的两个子树的高度最大差为1。解决了二叉查找树发生倾斜
而造成查询效率减低的问题,但同时带来了维持平衡的成本,在增加和删除节点时要通过旋转来保持树的平衡。
B-Tree是为磁盘等外存储设备设计的一种平衡查找树。当数据非常大时,内存不够用,大部分数据只能存放在磁盘上,只有需要的数据才加载到内存中,内存访问的时间比磁盘快一个等级。所以减少磁盘IO次数能够增加索引速度,B树多路的好处就是可以将多个关键字组成一个节点,有效的减低了B树的高度,每一个节点确定的范围更广也更精确,增加了缩小索引范围的速度。
B+ 树的特点是能够保持数据稳定有序,其插入与修改拥有较稳定的对数时间复杂度。 B+ 树元素自底向上插入。
B+树的主要特征:
1,索引关键字从左到右递增排序,非叶子结点关键字比其左边的指针指向的子节点都大,比其右边的关键字都小。
2,B+树的非叶子节点不保存关键字记录的指针,只进行数据索引,这样使得B+树每个非叶子节点所能保存的关键字大大增加;
3,B+树叶子节点保存了父节点的所有关键字记录的指针,所有数据地址必须要到叶子节点才能获取到。所以每次数据查询的次数,都一样;
4,B+树叶子节点的关键字从小到大有序排列,左边结尾数据都会保存右边节点开始数据的指针。 非叶子节点的子节点数=关键字数。
B+树相比B树的优势:
1,每个节点存储的关键字更多,树的高度更低,查询时磁盘IO次数更少。
2,所有查询都必须找到叶子节点,查询性能更稳定。
3,所有叶子节点形成有序双链表,便于范围查找。
聚集索引
非聚集索引
innodb_file_per_table在mysql5.6.6及其后续版本默认开启,开启该参数的时候,Innodb将每个新创建的表的数据及索引存储在一个独立的.ibd文件里。
.ibd文件是使用InnoDB引擎的表产生的索引和数据文件。每个表还对应一个.frm文件,描述了表的格式。
(如果引擎使用的是MyISAM的话,会产生索引和数据分开存放的两个文件,.MYI(索引文件)和.MYD(数据文件))
页是InnoDB磁盘管理的最小单位,默认每个页的大小为16KB。
B+树索引里的非叶子节点和叶子节点对应存储关键字的页和存储数据的页。
MySql中数据是按照行进行存取的,即页中保存着表里的一行行的数据。innodb一共有四种行格式,分别是:compact、redundant、dynamic、compressed。
每种格式原理上大体相同,这里只介绍COMPACT行格式。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。