b 树在数据库索引中的应用剖析 - idouba.pdf

b 树在数据库索引中的应用剖析 - idouba.pdf

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
b 树在数据库索引中的应用剖析 - idouba

B树在数据库索引中的应用剖析 引言 关于数据库索引,随便Google一个Oracle index,Mysql index总能得到 “某某索引之n条经典建议”之类大量结果。笔者认为,较之直接借鉴,在搞清 实际需求的基础上,对备选方案的原理尽可能深入全面的了解会更有利于我们的 决策。因为某种方案或者技术呈现出某种优势(包括可能没有被介绍到但一定存 在的限制),不是厂商的白皮书这样规定,是由实现机制决定的或者说本身的结 构决定的。 本文重点介绍数据结构中经典的树(B树)结构在数据库索引中的经典应用, 也会涉及到几种数据库中对此支持的细微不同,以期比较完整的描述实现原理。 最终会发现这几种被不同数据库厂商冠以不同名字的东西原理上其实差不多,理 论上其实是一个东西。文中只是略微空洞的介绍其实现原理,不涉及应用上具体 的使用建议。 关键字:B树 数据库索引 索引组织表(Index-Organized Tables) 聚集索引 非聚集索引 Oracle Mysql Mssql 一、关于数据库索引 数据库索引在维基中的定义:A database index isa data structure that improves the speed of data retrieval operations on a database table at thecostofadditionalwritesandtheuseofmore storagespacetomaintain the extra copy of data. Indexes are used to quickly locate data without having to searcheveryrow inadatabasetableeverytimea databasetable is accessed. 如果Index被翻译成目录可能更能体现出其本质 的作用。和其他很多计算机科学中的概念一样,Index 也是现实事物中的一种常见结构。由目录最容易联想 到的是图书馆的书籍管理,如果没有个目录,很难想 象要从图书馆的那么多书架上找到一本书是多么困 难的事情。 当然映射的最好的是小时候厚厚的新华字典前面的目录,对于字典中数据根 据两种拼音和笔画(四角号码)两种属性进行索引。字典前面和后面多出来的那么 几十页纸(额外的存储)的用处就是快速定位到字典中某个词条的完整记录。如 果没有这个Index,要查找字典的某个字就只有full table scan一样的挨着翻 页了。 二、关于B树索引 数据库中比较常用的索引结构有B树、位图等几种。其中B树是几乎所有数 据库的默认索引结构,也是用的最多的索引结构。 索引的基本作用是用于查找。数据结构的查找算法中最基本的是顺序查找, 即从列表上逐个匹配关键字,其时间复杂度是O(n),当n 比较大的时候这个效 率是不能承受的。于是计算机科学尝试能不能在存储上做些文章发明效率更高的 算法,然后就有了数据结构中我们熟悉的基于排序树的查找。B树(其实是B+ 树)是一种树的结构,通常用于数据库和操作系统的文件系统中。B+树的创造者 Rudolf Bayer没有解释B代表什么。最常见的观点是B代表平衡(balanced), 因为所有的叶子节点在树中都在相同的级别上,B也可能代表Bayer,或者是波 音 (Boeing),因为他曾经工作于波音科学研究实验室。下图是一件简单的B 树的例子。 B树是一棵平衡树,是计算机科学中改进的二叉查找树。在查找树进行查询 /新增/删除等动作,所花的时间与树的高度h成比例,并不与树的容量n成比例。 在B树上不管查找成功与否,每次查找都是走了一条从根到叶子结点的路径。这 样使得在B树中检索一个节点最多需要h个节点,而数据库系统中一般将一个节 点的大小设定为一个页,每个节点一次IO。使B树的根节点常驻内存,则一次 检索最多需要h-1次的I/O即可。关于平衡树的结构,遍历、查找方式、节点的 删除、添加等都是很典型的内容,不在此做介绍。B树检索的伪代码如下: 1 Function: search (k) 2 return tree_search (k,root); 3 4 Function: tree_search (k,node) 5 if node is a leaf then 6 return node; 7 switch k do 8 case k k_0 9 return tree_search(k, p_0);

您可能关注的文档

文档评论(0)

wujianz + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档