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+树在数据库中的一种实现,是最常见也是数...
  • IFollowRivers
  • IFollowRivers
  • 2017年06月23日 11:06
  • 3548

Oracle学习笔记(一)——B-Tree索引

目录是索引的一个最好的例子,每条目录包含对应章节的标题和页码,类比索引的每条索引项包含了数据记录的某些键值组合并包含了对应数据块的访问路径(rowid)。目录的存在就是为了快速定位到感兴趣的内容,索引...
  • biww620
  • biww620
  • 2017年06月10日 19:31
  • 280

B-tree 索引提高 MySQL 查询效率的原理

在MySQL中,我们常用的存储引擎 InnoDB 和 MyISAM 的索引都是B-Tree 索引。大家都知道,建立索引的目的便是优化慢查询,那么慢查询究竟慢在哪里呢? 查询时间 一个sql查询的...
  • JathamJ
  • JathamJ
  • 2017年01月09日 09:20
  • 1064

Mysql的BTree索引的原则和限制

这是自己在阅读《高性能MySQL》所做的笔记,和大家分享下 当人们谈论索引时,没有特别指明类型,那么多半就是B-Tree索引,它使用树形结构来存储数据,大多数MySQL引擎都支持这种索引类型,比如...
  • xiao2shiqi
  • xiao2shiqi
  • 2017年01月06日 18:06
  • 744

B-Tree B+Tree mysql索引(MyISAM,InnoDB)

的话 在编程领域有一句人尽皆知的法则 “程序 = 数据结构 + 算法”,我个人是不太赞同这句话(因为我觉得程序不仅仅是数据结构加算法),但是在日常的学习和工作中我确认深深感受到数据结构和算法的重要性...
  • fwch1982
  • fwch1982
  • 2012年06月08日 11:32
  • 4927

B-Tree 索引和 Hash 索引的对比

对于 B-tree 和 hash 数据结构的理解能够有助于预测不同存储引擎下使用不同索引的查询性能的差异,尤其是那些允许你选择 B-tree 或者 hash 索引的内存存储引擎。B-Tree 索引的特...
  • defonds
  • defonds
  • 2015年07月06日 21:14
  • 10922

mysql hash 索引 vs B-TREE 索引 理解

hash 索引 当前只有 memory 引擎支持 hash 索引 索引由 HASH 算法获得, 因此不一定是唯一 HASH 值,需要对索引进行全扫描   如上图描述,数据存放后, HASH 索引表...
  • signmem
  • signmem
  • 2013年10月24日 21:02
  • 5952

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

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

索引基础——B-Tree、B+Tree、红黑树、B*Tree数据结构

B树(B-Tree,并不是B“减”树,横杠为连接符,容易被误导)        是一种多路搜索树(并不是二叉的):        1.定义任意非叶子结点最多只有M个儿子;且M>2; ...
  • zhangliangzi
  • zhangliangzi
  • 2016年05月10日 23:10
  • 6292

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

索引是 MySQL数据库很重要的一部分,它对数据表查询性能的好坏起着决定性的作用,对大表尤甚。 作为索引中最为常见的一种类型,B-Tree索引大都采用的是 B+Tree数据结构来存储数据(NDB集群...
  • STFPHP
  • STFPHP
  • 2016年10月16日 01:17
  • 1754
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mysql b-tree索引
举报原因:
原因补充:

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