mysql深入理解数据库索引结构

1)数据库文件存储的方式:
数据库文件存储都是以磁盘文件存储在系统中的,这也是数据库能持久化存储数据的原因。

2)从数据库读取数据的原理:
从数据库读取数据,先暂且不考虑从缓存中读取数据的情况,那就是从磁盘文件中读取数据的,我们知道从磁盘文件中读取数据是比较耗时的,数据库的select操作的时间,取决于执行磁盘IO的次数,因此尽量减少磁盘IO就可以显著的提升数据的查询速度。

3)减少磁盘IO操作的影响因素:
磁盘IO与预读:
磁盘读取依靠的是机械运动,分为寻道时间、旋转延迟、传输时间三个部分,这三个部分耗时相加就是一次磁盘IO的时间,大概9ms左右。这个成本是访问内存的十万倍左右;正是由于磁盘IO是非常昂贵的操作,所以计算机操作系统对此做了优化:预读;每一次IO时,不仅仅把当前磁盘地址的数据加载到内存,同时也把相邻数据也加载到内存缓冲区中。 *因为局部预读原理说明:当访问一个地址数据的时候,与其相邻的数据很快也会被访问到。*每次磁盘IO读取的数据我们称之为一页(page)。一页的大小与操作系统有关,一般为4k或者8k。这也就意味着读取一页内数据的时候,实际上发生了一次磁盘IO。

正因为有了磁盘IO预读机制,所以才有了减少磁盘IO的可能,因为一次磁盘IO操作,可以查找到物理存储中相邻的一大片数据。

以索引为B+树为例:

磁盘IO次数和索引数据结构查询的次数以及磁盘IO与预读都有关系,具体关系:磁盘IO次数 <= B+树中从根节点一直到叶子节点整个过程中查询的节点数。

一次磁盘IO操作可以取出物理存储中相邻的一大片数据,如果查询的索引数据(就是B+树中从根节点一直到叶子节点整个过程中查询的节点数)都集中在该区域,那么只需要一次磁盘IO,否则就需要多次磁盘IO。

4)基于磁盘IO预读机制,索引可以快速查询数据
索引是帮助数据高效查询数据的一种数据结构,它包含一个表中某些列的值以及记录对应的地址,并且把这些值存储在一个数据结构中。常用的索引有B树和B+树。

在数据库中,聚集索引在B+树的叶子节点存储的是整个记录数据,非聚集索引存储的是指向记录数据的指针。

5)数据库为什么使用B+树作为索引结构
1. 链表:每次查询都要从头开始查,复杂度为O(N)。

2. 数组:虽然查询速度为O(1),但是插入,删除就比较麻烦了。还有索引存在磁盘中,当索引非常大的时候,无法一次加载到内存中。

3. 平衡二叉树:虽然查找时间最快,O(logN),但是B树和B+树更加“矮胖”,即磁盘IO次数更少。

4. B+树比B树更加“矮胖”,更适合做索引结构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值