码迷,mamicode.com
首页 > 数据库 > 详细

对数据库索引的数据结构学习

时间:2015-12-21 21:38:17      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:

我前段时间一直在使用Oracle数据库,发现建立索引对查询速度的提升是很大的,就对这个比较好奇,把学习到的知识归列如下。

以Mysql为例,它的索引就是采用B树和B+树这种数据结构来实现的。大学里没好好学习数据机构,不过现在来补也还不晚~

B树,是一种使用文件存储时常用的数据结构结构,它是二叉查找树的升级版——可以多叉。因为在这种需要机械磁盘与主存交换数据的场景下,最耗费时间的其实是磁盘读取次数,也就是读写磁头要转到磁道上正确位置这种物理动作所花费的时间是远大于数据的传输的。以7200转每分钟的常见机械硬盘为例,转完整的一拳需要8.33毫秒,这比以硅为存储介质的主存差不多慢了五个数量级,后者只需要100纳秒,0.0001毫秒。

所以,如何减少磁盘读取次数就成了关键,而B树的多叉结构可以让足够多的数据一次性换入主存。一棵分支因子为1000、高度为2的B树可以存储超过10亿个关键字,寻找某一关键字只需要两次磁盘存取。而存储同样多的关键字,2^30-1 > 十亿,一棵二叉查找树的高度会是30。

技术分享

 

下面是算法导论中的一些结论,直接抄过来记结论就好了。

 

一棵每个节点最少包含t的结点,总关键字数为n的B树的高度

技术分享

 

B树的查找所需磁盘存储次数为O(logtn)

技术分享

 

B树的插入所需存储次数为O(t*logtn)

技术分享

 

对数据库索引的数据结构学习

标签:

原文地址:http://www.cnblogs.com/andrew-chen/p/5064751.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!