InnoDB的B+树索引】的更多相关文章

本文出处:http://www.cnblogs.com/wy123/p/7211742.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错误进行修正或补充,无他) MySQL中的InnoDB引擎表索引类型有一下几种(以下所说的索引,没有特殊说明,均指InnoDB引擎表索引.) 0 = Secondary Index,二级索引, 1 = Clustered Index,聚集索引 2 = Unique Index,唯一索引 3 = Pri…
何时使用索引 并不是在所有的查询条件下出现的列都需要添加索引.对于什么时候添加B+树索引,我的经验是访问表中很少一部分行时,使用B+树索引才有意义.对于性别字段.地区字段.类型字段,它们可取值的范围很小,即低选择性.如: SELECT * FROM student WHERE sex='M' 对于性别,可取值的范围只有'M'.'F'.对上述SQL语句得到的结果可能是该表50%的数据(我们假设男女比例1:1),这时添加B+树索引是完全没有必要的.相反,如果某个字段的取值范围很广,几乎没有重复,即高…
B+树索引其本质就是B+树在数据库中的实现,但是B+索引在数据库中有一个特点就是其高扇出性,因此在数据库中,B+树的高度一般都在2-3层,也就是对于查找某一键值的行记录,最多只需要2到3次IO,这倒不错.因为我们知道现在一般的磁盘每秒至少可以做100次IO,2-3次的IO意味着查询时间只需0.02-0.03秒. 数据库中的B+树索引可以分为聚集索引(clustered index)和辅助聚集索引(secondary index)辅助聚集索引有时也称非聚集索引(non-clustered inde…
MySQL的InnoDB索引结构采用B+树,B+树什么概念呢,二叉树大家都知道,我们都清楚随着叶子结点的不断增加,二叉树的高度不断增加,查找某一个节点耗时就会增加,性能就会不断降低,B+树就是解决这个问题的. B树和B+树 在一棵M阶B树中,每个节点最多有 M-1 个关键字,根节点最少可以只有一个关键字,非根节点最少有 Math.ceil(m/2)-1个关键字,下图是一棵阶数为3的树 看下图我们说说B树的特点,很明显一个节点存储的数据更多了,不需要很高的高度就可以存储更多的数据,把一个节点看作一…
数据库中B+树索引的分裂并不总是从页的中间记录开始,这样可能会导致空间的浪费,例如下面的记录: 1, 2, 3, 4, 5, 6, 7, 8, 9 插入式根据自增顺序进行的,若这时插入10这条记录后需要进行页的分裂操作,那么根据B+树对半分裂的规则,会将记录5作为分裂点记录,分裂后得到下面两个页: P1: 1, 2, 3, 4 P2: 5, 6, 7, 8, 9, 10 然而由于插入是顺序的,P1这个页中将不再会有记录被插入,从而导致空间的浪费,而P2又会再次分裂.那么如何优化? InnoDB存…
很早之前,就从学校的图书馆借了MySQL技术内幕,InnoDB存储引擎这本书,但一直草草阅读,做的笔记也有些凌乱,趁着现在大四了,课程稍微少了一点,整理一下笔记,按照专题写一些,加深一下印象,不枉读了一遍书.与此同时,也加深一下对MySQL的了解,认识了原理,对优化的原则才有把握,对问题的分析才有源头. 关于B+树数据结构 ①InnoDB存储引擎支持两种常见的索引. 一种是B+树,一种是哈希.B+树中的B代表的意思不是二叉(binary),而是平衡(balance),因为B+树最早是从平衡二叉树…
一.InnoDB索引 InnoDB支持以下几种索引: B+树索引 全文索引 哈希索引 本文将着重介绍B+树索引.其他两个全文索引和哈希索引只是做简单介绍一笔带过. 哈希索引是自适应的,也就是说这个不能人为干预在一张表生成哈希索引,InnoDB会根据这张表的使用情况来自动生成. 全文索引是将存在数据库的整本书的任意内容信息查找出来的技术,InnoDB从1.2.x版本支持.每张表只能有一个全文检索的索引. B+树索引是传统意义上的索引,B+树索引并不能根据键值找到具体的行数据,B+树索引只能找到行数…
B+ 树是为磁盘设计的 m 叉平衡查找树,在B+树中,所有的记录都是按照键值的大小,顺序存放在同一层的叶子节点上,各叶子节点组成双链表.叶节点是数据,非叶节点是索引. 首先,需要清楚:B+ 树索引并不能定位到给定键值的具体行,B+树索引只能找到数据行所在的页.然后,数据库把页读入内存,在内存中查找所需要的行. B+树索引在数据库中有一个特点是高扇出性,在数据库中,B+树的高度一般都在2 ~ 4层,即查找某一键值的行记录只需要2到4次的IO.数据库的B+树索引分为聚集索引和辅助索引,不管是聚集还是…
关于B+树数据结构 ①InnoDB存储引擎支持两种常见的索引. 一种是B+树,一种是哈希. B+树中的B代表的意思不是二叉(binary),而是平衡(balance),因为B+树最早是从平衡二叉树演化来的,但是B+树又不是一个平衡二叉树. 同时,B+树索引并不能找到一个给定键值的具体行.B+树索引只能找到的是被查找数据行所在的页.然后数据库通过把页读入内存,再在内存中进行查找,最后得到查找的数据. 再说一下平衡二叉树: 这是一幅平衡二叉树,左子树的值总是小于根的值,右子树的值总是大于根的键值,因…
索引类似于书的目录,他是帮助我们从大量数据中快速定位某一条或者某个范围数据的一种数据结构.有序数组,搜索树都可以被用作索引.MySQL中有三大索引,分别是B+树索引.Hash索引.全文索引.B+树索引是最最重要的索引,Hash索引和全文索引用的并不是太多,InnoDB不支持Hash索引,不过存储引擎内部去定位数据页时会使用Hash索引, 这不是本文重点.本文将简单介绍B+树索引. B+树的基本结构 这里不对B+树做精确定义,直接给出一个B+树的示意图并做一些解释说明. 图1:B+树的基本结构(来…