数据库索引原理

数据库索引原理

索引的目的在于提高查询效率,索引就像是书的目录,是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度。
索引的原理在于使用空间换时间,索引会将建立的索引KEY存储在N叉树(BTree)。BTree适合在磁盘存储设备上组织动态查找表,这些数据结构以某种方式引用(指向)数据。

磁盘IO预读

计算机操作系统考虑到磁盘IO操作的高昂代价,当一次IO操作时,会把当前磁盘页和相邻的数据也读取到内存缓存区。

索引的结构数据

索引是使用B+树实现的数据结构。


image.png

每个磁盘块包含:数据项(蓝色)、指针(黄色);非叶子节点只不存储真实的数据,只存储指引搜索方向的数据项,真实的数据存储在叶子结点。P1指向小于17的磁盘块,P2指向17和35之间的磁盘块,P3表示大雨35的磁盘块。

二叉树

二叉查找树是一种查找效率非常高的数据结构,二叉查找树的结构不适合数据库,因为它的查找效率与层数相关。它有三个特点。

  1. 每个节点最多只有两个子树。
  2. 左子树都为小于父节点的值,右子树都为大于父节点的值。
  3. 在n个节点中找到目标值,一般只需要log(n)次比较。

BTree树

这种数据结构,非常有利于减少读取硬盘的次数。假定一个节点可以容纳100个值,那么3层的B树可以容纳100万个数据。


image.png

B树的特点也有三个。

  1. 一个节点可以容纳多个值。比如上图中,最多的一个节点容纳了4个值。
  2. 除非数据已经填满,否则不会增加新的层。也就是说,B树追求"层"越少越好。
  3. 子节点中的值,与父节点中的值,有严格的大小对应关系。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 数据库索引是一个初级程序员容易忽视的东西,因为绝大多数时候我们都是使用简单的默认索引,也就是主键索引,但面对现在硬...
    onlyHalfSoul阅读 4,476评论 0 2
  • MySql数据库索引原理 写在前面:索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点。考虑...
    琴匣自鸣阅读 5,637评论 0 2
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,120评论 2 89
  • 前段时间,公司一个新上线的网站出现页面响应速度缓慢的问题, 一位负责这个项目的但并不是搞技术的妹子找到我,让我想办...
    ifels阅读 3,811评论 0 4
  • 转载至 https://tech.meituan.com/mysql-index.html 索引目的 索引的目的在...
    六尺帐篷阅读 12,072评论 0 8