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

我前段时间一直在使用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)

时间: 2025-01-31 14:56:17

对数据库索引的数据结构学习的相关文章

数据库索引及其数据结构

出处:http://blog.linezing.com/?p=798 转载: http://blog.csdn.net/kennyrose/article/details/7532032 说白了,索引问题就是一个查找问题...   数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询.更新数据库表中数据.索引的实现通常使用B树及其变种B+树. 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法.

关于oracle数据库索引的一些学习记录

1.索引的特点        a.对具有只读我或较少插入.更新或删除操作的大表可以提高查询速度.        b.可以对表的一列或多列建立索引.        c.建立索引的数量没有限制.        d.索引需要磁盘存储,需要oracle自动维护.        e.索引对用户透明,是否使用索引是由oracle决定的. 2.RDBMS访问数据的基本方法        a.全表扫描        b.通过ROWID        c.使用索引 3.增加索引会带来insert语句性能的下降.

数据库索引详解

[By GavinHacker] 转载请标明出处:http://www.cnblogs.com/gavinsp/p/5513536.html 关于数据库索引,相信大家用到最多的一定是数据库设计和数据库查询,本篇深度解析一下数据库索引的原理,涉及数据库本身的设计原理,对设计应用的数据库结构,和数据库查询也大有益处. (一)在了解数据库索引之前,首先了解一下数据库索引的数据结构基础,B+tree B+tree 是一个n叉树,每个节点有多个叶子节点,一颗B+树包含根节点,内部节点,叶子节点.根节点可能

数据库索引学习

一.索引介绍 数据库索引调优是一项技术活,不能仅仅靠理论,因为实际情况千变万化,而且各种数据库本身存在很复杂的机制,如查询优化策略和各种引擎的实现等.但同时这些理论是索引调优的基础,只有在明白理论的基础上,才能对调优策略进行合理推断并了解其背后的机制,然后结合实践中不断的实验和摸索. 索引其实就是在数据库存储数据之外,还维护着另外的满足某种查询算法的数据结构,这些数据结构再以某种方式指向真实的存储数据,然后在现有的数据结构上实现快速查询.(找了张很不错的二叉树的图来理解索引,现在大多的索引都是B

数据库(Mysql)背后的数据结构-学习

来吧,用这三篇文章夯实对Mysql的理解吧. 关于数据库索引及其优化,更多可参见此文:http://www.cnblogs.com/pkuoliver/archive/2011/08/17/mass-data-topic-7-index-and-optimize.html: 关于MySQL索引背后的数据结构及算法原理,这里还有一篇很好的文章:http://blog.codinglabs.org/articles/theory-of-mysql-index.html: 关于B 树.B+ 树.B*

Mysql学习笔记(四)聊聊数据库索引

小心情(可直接跳到分割线后) 今天心情好些了.一些浓的化不开的坏情绪,也渐渐的在晚上解决掉一个复杂的逻辑问题后,渐渐消散了. 今天中午去吃饭的时候,坤哥漫不经心的说:'我这么多年终于悟出了一个道理,人年轻的时候不要那么拼命,都没有时间做其他事情了' 我问什么其他事情,坤哥看了我一眼,又继续漫不经心的说,那么忙,都没有时间谈恋爱了. 我想不那么拼命可以嘛?房价每年都涨,生活的成本与日俱增.如果不努力让自己的价值所赚取的金钱,超过经济增速.那么只能继续成为一个社会底层的loser,继续在青春的美好时

MongoDB索引(一) --- 入门篇:学习使用MongoDB数据库索引

这个系列文章会分为两篇来写: 第一篇:入门篇,学习使用MongoDB数据库索引 第二篇:进阶篇,研究数据库索引原理--B/B+树的基本原理 1. 准备工作 在学习使用MongoDB数据库索引之前,有一些准备工作要做,之后的探索都是基于这些准备工作. 首先需要建立一个数据库和一些集合,这里我就选用一个国内手机号归属地的库,大约32W条记录,数据量不大,不过做一些基本的分析是够了. 首先我们建立一个数据库,叫做db_phone,然后导入测试数据.测试数据就是一些手机号归属地的信息.单个文档长这个样子

【一步一步学习mysql】Mysql索引底层数据结构与算法

索引是什么 索引是帮助MySQL高效获取数据的排好序的数据结构. 索引存储在文件里 补充知识: 磁盘存取原理: * 寻道时间(速度慢,费时) * 旋转时间(速度较快) 磁盘IO读取效率: * 单次IO读取是N个页的大小,读取数据量大于N个页就需要分页读取. 索引的数据结构,推荐学习网站:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html 二叉树 有可能出现worst-case,如果输入序列已经排序,则时间复杂度为O(N)

关系型数据库(二),索引的数据结构

目录 1.二叉查找树 2.B树(B-Tree) 3.B+树(B+-Tree) 4.Hash索引 二.索引的数据结构 1.二叉查找树 2.B树(B-Tree) 二叉搜索树如果数量太大,则进行I/O次数太多,效率也不会太高,所以我们要想办法让树变矮一点,于是就有了B-Tree (1)B-Tree定义 (2)3阶B-Tree 3.B+树(B+-Tree) (1)定义 (2)B+-Tree 4.Hash索引 原文地址:https://www.cnblogs.com/xzmxddx/p/10356008.