mysql b-tree索引

转载 2012年03月23日 09:46:38

索引优化,可以说是数据库相关优化,尤其是Query 优化中最常用的优化手段之一。很多人大部分时候都只是大概了解索引的用途,知道索引能够让 Query 执行得更快,但并不知道为什么会更快。尤其是索引的实现原理、存储方式,以及不同索引之间的区别等就更不清楚了。正因为索引对Query的性能影响很大,所以我们更应该深入理解 MySQL 中索引的基本实现,以及不同索引之间的区别,这样才能分析出如何设计最优的索引,最大幅度地提升Query的执行效率。

在 MySQL 中,主要有4种类型的索引,分别为:B-Tree 索引、Hash索引、Fulltext 索引和 R-Tree 索引。

 

B-Tree 索引是 MySQL 数据库中使用最为频繁的索引类型,除了 Archive 存储引擎之外的其他所有的存储引擎都支持 B-Tree 索引。不仅在MySQL 中是如此,在其他的很多数据库管理系统中 B-Tree 索引也同样是作为最主要的索引类型的,这主要是因为 B-Tree索引的存储结构在

数据库的数据检索中有着非常优异的表现

一般来说,MySQL 中的 B-Tree 索引的物理文件大多是以 Balance Tree 的结构来存储的,也就是所有实际需要的数据都存放于 Tree 的Leaf Node,而且到任何一个 Leaf Node的最短路径的长度都是完全相同的,所以把它称之为 B-Tree 索引。不过,可能各种数据库(或 MySQL 的各种存储引擎)在存放自己的 B-Tree 索引的时候会对存储结构稍作改造。如 InnoDB 存储引擎的 B-Tree 索引使用的存储结构实际上是 B+Tree,在 B-Tree 数据结构的基础上做了很小的改造,在每一个 Leaf Node 上面除了存放索引键的相关信息之外,还存储了指向与该 Leaf Node 相邻的后一个 Leaf Node 的指针信息,这主要是为了加快检索多个相邻 Leaf Node 的效率。

在 InnoDB 存储引擎中,存在两种不同形式的索引,一种是 Cluster 形式的主键索引(Primary Key),另外一种则是和其他存储引擎(如MyISAM存储引擎)存放形式基本相同的普通 B-Tree 索引,这种索引在 InnoDB 存储引擎中被称为 Secondary Index。下面通过图8-1针对这两种索引的存放形式做一个比较。

图8-1左侧为Clustered 形式存放的 Primary Key,右侧则为普通的 B-Tree 索引。两种索引在 Root Node 和Branch Nodes 方面完全一样。但它们会在Leaf Nodes方面出现差异。在 Primary Key 中,Leaf Nodes 存放的是表的实际数据,不仅仅包括主键字段的数据,还包括其他字段的数据,整个数据以主键值有序的排列。而 Secondary Index 则和其他普通的 B-Tree 索引没有太大的差异,只是在 Leaf Nodes除了存放索引键的相关信息外,还存放了 InnoDB 的主键值。

所以,在 InnoDB 中如果通过主键来访问数据效率是非常高的,而如果是通过 Secondary Index 来访问数据的话,InnoDB 首先通过 Secondary Index 的相关信息及相应的索引键检索到 Leaf Node,再通过Leaf Node 中存放的主键值和主键索引来获取相应的数据行

 

 

tree

相关文章推荐

MySQL中B+Tree索引原理

转自:http://blog.csdn.net/u013235478/article/details/50625677 B+树索引是B+树在数据库中的一种实现,是最常见也是数...

高性能Mysql:B-TREE和B+-TREE

高性能Mysql:B-TREE和B+-TREE一、索引简介数据库中,索引对于查询来说至关重要。它就像书籍里的目录一样,能在磁盘页面中迅速找到所需要的记录,能够将查询性能提高好几个数量级。所以索引是应对...

B+/-Tree原理及mysql的索引分析

B+/-Tree原理 B-Tree介绍 B-Tree是一种多路搜索树(并不是二叉的):        1.定义任意非叶子结点最多只有M个儿子;且M>2;        2.根结点的儿子数为[2...

Mysql学习-索引总结(B-tree和hash、主键索引、唯一索引、普通索引、全文索引和组合索引)

对最近学习的mysql中的索引经行总结。其主要内容包括唯一索引、B-tree、哈希索引(自定义哈希索引和Innodb自适应哈希索引)和全文索引(自然语言搜索和布尔搜索)。参考书籍和文章是《Mysql技...

MySQL中MyISAM和InnoDB对B-Tree索引不同的实现方式

索引是 MySQL数据库很重要的一部分,它对数据表查询性能的好坏起着决定性的作用,对大表尤甚。 作为索引中最为常见的一种类型,B-Tree索引大都采用的是 B+Tree数据结构来存储数据(NDB集群...
  • STFPHP
  • STFPHP
  • 2016年10月16日 01:17
  • 1240

MySQL索引原理

B+树索引是B+树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引。B+树中的B代表平衡(balance),而不是二叉(binary),因为B+树是从最早的平衡二叉树演化而来的。在讲B...

mysql索引结构B+Tree结构

数据库为什么要用B+树结构--MySQL索引结构的实现 B+树在数据库中的应用 { 为什么使用B+树?言简意赅,就是因为: 1.文件很大,不可能全部存储在内存中,故要存储到磁盘...

B-Tree索引在sqlserver和mysql中的应用

B-Tree索引在sqlserver和mysql中的应用 在谈论数据库性能优化的时候,通常都会提到“索引”,但很多人其实并没有真正理解索引,也没有搞清楚索引为什么就能加快检索速度,以至于在实践中...
  • hephec
  • hephec
  • 2014年11月29日 12:45
  • 358

B+/-Tree原理及mysql的索引分析

B+/-Tree原理及mysql的索引分析

MySql索引算法原理解析(通俗易懂,只讲B-tree)

刚开始学习的时候,百度去查,但发现好多说得太复杂不好理解,结合各个文章总结一下(建议大概看文字,不理解不要紧,然后再看图的执行步骤然后在结合文字,这样一切就清晰好多) B-tree,B是balanc...
  • lc0817
  • lc0817
  • 2016年08月25日 17:23
  • 450
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mysql b-tree索引
举报原因:
原因补充:

(最多只允许输入30个字)