Mysql 索引

索引通常是提高查询效率的最好方式,使用索引经常可以使查询效率提高几十倍、几百倍,甚至更多。

本人将Mysql索引归为两大类,按索引组织结构分类和按索引使用方式分类。

1、按索引组织结构分类

1.1 B+Tree索引 

以下内容引用自:http://blog.csdn.net/tonyxf121/article/details/8393545

1.1.1 B-Tree

B-Tree介绍

B-Tree是一种多路搜索树(并不是二叉的):

(1) 定义任意非叶子结点最多只有M个儿子,且M>2

(2) 根结点的儿子数为[2, M]

(3) 除根结点以外的非叶子结点的儿子数为[M/2, M]

(4) 每个结点存放至少M/2-1(取上整)和至多M-1个关键字,(至少2个关键字)

(5) 非叶子结点的关键字个数=指向儿子的指针个数-1

(6) 非叶子结点的关键字:K[1], K[2], …, K[M-1];且K[i] < K[i+1]

(7) 非叶子结点的指针:P[1], P[2], …, P[M], 其中P[1]指向关键字小于K[1]的子树,P[M]指向关键字大于K[M-1]的子树,其它P[i]指向关键字属于(K[i-1], K[i])的子树

(8) 所有叶子结点位于同一层

如:(M=3)

B-树的特性:

(1) 关键字集合分布在整颗树中

(2) 任何一个关键字出现且只出现在一个结点中

(3) 搜索有可能在非叶子结点结束

(4) 其搜索性能等价于在关键字全集内做一次二分查找

(5) 自动层次控制

树的搜索,从根结点开始,对结点内的关键字(有序)序列进行二分查找,如果命中则结束,否则进入查询关键字所属范围的儿子结点;

重复,直到所对应的儿子指针为空,或已经是叶子结点;

1.1.2 B+Tree

B+Tree介绍

B+树是B-树的变体,也是一种多路搜索树:

(1) 其定义基本与B-树同,除了:

(2) 非叶子结点的子树指针与关键字个数相同;

(3) 非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树(B-树是开区间);

(5) 为所有叶子结点增加一个链指针;

(6) 所有关键字都在叶子结点出现;

如:(M=3)

B+的搜索与B-树也基本相同,区别是B+树只有达到叶子结点才命中(B-树可以在非叶子结点命中),其性能也等价于在关键字全集做一次二分查找.
B+的特性:

(1) 所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好是有序的;

(2) 不可能在非叶子结点命中;

(3) 非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层;

(4) 更适合文件索引系统;

mysql中普遍使用B+Tree做索引,但在实现上又根据聚簇索引和非聚簇索引而不同。

(1) 聚簇索引

所谓聚簇索引,就是指主索引文件和数据文件为同一份文件,聚簇索引主要用在Innodb存储引擎中。在该索引实现方式中B+Tree的叶子节点上的data就是数据本身,key为主键,如果是一般索引的话,data便会指向对应的主索引,在B+Tree的每个叶子节点增加一个指向相邻叶子节点的指针,就形成了带有顺序访问指针的B+Tree。做这个优化的目的是为了提高区间访问的性能,例如图4中如果要查询key为从18到49的所有数据记录,当找到18后,只需顺着节点和指针顺序遍历就可以一次性访问到所有数据节点,极大提到了区间查询效率。

(2) 非聚簇索

非聚簇索引就是指B+Tree的叶子节点上的data,并不是数据本身,而是数据存放的地址。主索引和辅助索引没啥区别,只是主索引中的key一定得是唯一的。主要用在MyISAM存储引擎中,如下图:

1.2 R-Tree索引

R-Tree树的介绍来自百度百科:http://baike.baidu.com/view/5086047.htm?fr=aladdin

R树是B树 向多维空间发展的另一种形式,它将对象空间按范围划分,每个结点都对应一个区域和一个磁盘页,

非叶结点的磁盘页中存储其所有子结点的区域范围,非叶结点的 所有子结点的区域都落在它的区域范围之内;

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值