InnoDB索引底层原理剖析

本文深入探讨了InnoDB存储引擎的索引设计,包括索引数据结构(如哈希索引、二叉搜索树、红黑树、B树和B+树)及其优缺点。重点介绍了B+树在数据库索引中的应用,强调了B+树在数据检索中的高效性。文章还详细讲解了InnoDB索引的设计,包括计算机原理(如主存与磁盘的差异、磁盘预读)、查找过程、聚族索引与二级索引的概念和区别。最后,讨论了创建索引的类型(如普通索引、唯一索引、主键索引、组合索引)以及索引的优缺点和外键的作用。
摘要由CSDN通过智能技术生成

目录

1、索引数据结构
2、InnoDB索引的设计
(1)计算机原理
(2)查找过程
(3)聚族索引与二级索引
(4)创建索引及索引的类型
(5)索引的缺点
(6)外键及作用


1、索引数据结构

哈希索引(Hash indexes)采用哈希表来对键值进行查找,时间复杂度为O(1)。1、使用哈希索引时对于键值的等值查询是非常快的,但是其他类型的查询如范围查询、模糊查询、排序等是不能使用哈希索引的。这是哈希索引使用比较少的主要原因。2、在数据量很大的情况下,内存无法加载全部的数据索引。3、Hash 索引遇到大量Hash值相等(hash碰撞)的情况后性能并不一定就会比B-Tree索引高。

二叉搜索树:优点:可以解决大量数据索引无法一次加载进内存中的问题,二叉搜索树可以批量加载数据进内存。缺点:1、检索时间与树的高度有关,树的高度越高,检索次数及时间相对就会越久。2、极端情况下,如果数据本身就是有序的,二叉搜索树会退化成链表,性能会急剧降低。红黑树:红黑树是一种自平衡二叉树,主要解决二叉搜索树在极端情况下退化成链表的情况。

B树:B树是一种多路搜索树(返回整个表时需要往上回查),每个子节点可以拥有多于2个子节点,M路的B树最多可拥有M个子节点。设计成多路,其目的是为了降低树的高度,降低查询次数,提高查询效率。1、虽然多路可以降低树的高度,但是如果设计成无限多路,就会退化成有序数组,一般B树的使用场景是用于文件的索引,这些索引会存放于硬盘中,有时内存是无法一次性加载完,此时就无法进行查找。2、如果全部在内存中,红黑树的查找效率要高于B树,但是涉及到磁盘操作,B树要优于红黑树,所以在JDK1.8版本的HashMap中,如果单个桶的链表长度多于8或全部桶的链表总长度多余64,会将链表转换成红黑树。

B+树:B+树是对于B树进行优化的多路搜索树,主要设计是将数据全部存放于叶子节点,并将叶子节点用指针进行链表链接。

  • 数据库的索引一般数据量不小,同时又存放于磁盘中,采用多路搜索树,可以降低树的高度,同时在大数据量下可以分批载入内存,提高查询效率。
  • 不同于B树的使用场景,数据库的查询中,我们一般查询的数量不会是单条数据,例如列表常用查询中的分页查询--查询第1页的10条数据,此时如果采用B树,需要进行树的中序遍历,可能需要跨层访问。
  • 而B+树的所有数据全部存放于叶子节点上,且叶子节点之间采用指针进行链表链接一次查询多条时,确定首尾位置,便可以方便的确定多条数据位置。

  • 内节点不存储data,只存储key:更大的出度;叶子节点不存储指针;一般来说,B+Tree比B-Tree更适合实现外存储索引结构

2、InnoDB索引的设计

(1)计算机原理

在计算机系统中一般包含两种类型的存储,计算机主存(RAM)外部存储器(如硬盘、CD、SSD等)。在设计索引算法和存储结构时,我们必须要考虑到这两种类型的存储特点。主存的读取速度快,相对于主存,外部磁盘的数据读取速率要比主从慢好几个数量级,具体它们之间的差别后面会详细介绍。 上面讲的所有查询算法都是假设数据存储在计算机主存中的,计算机主存一般比较小,实际数据库中数据都是存储到外部存储器的。
           一般来说,索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上。这样的话,索引查找过程中就要产生磁盘I/O消耗,相对于内存存取,I/O存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值