MySQL调优和性能分析之索引及其数据结构

一、为什么要使用索引  以及 索引的数据结构

    使用数据库进行查询的时候,如果没有索引,那我们查找数据需要进行全表的扫描;假如我们现在有一百万条数据,我们去全表的进行扫描,那我们的查询的复杂度是O(n);

这样的消耗是很大的;因此我们要使用索引。

    为了查询的速度更快,我们就想到用二叉树来加快查询的速度;例如使用自平衡二叉树例如红黑树;但这样还会有一个问题,因为磁盘的读取是分页的;而磁盘的io事实上是比较消耗资源的操作,我们应该尽量减少磁盘的io;因而使用了B+Tree这种数据结构;因为B+Tree的 度 是可以设置的,我们可以设置尽可能与磁盘读取一页的数据的量相同的节点去盛装这些数据,减少磁盘的io,从而加快数据库的查询速度;


关于磁盘如何读取数据 和 B+Tree的相关知识请看这里   这篇我转载的博文上有很好的介绍;


二、磁盘io

       磁盘的随机访问是比较费时的;不管我们在APP端设置缓存也好、还是项目中使用Mybatis的缓存也好,其实都是为了去减少数据库的操作;增加缓存命中的几率就可以减少数据库对磁盘的操作;这里我们主要分析一下数据库的访问操作;

     

       MySQL 的数据是以文件的形式存储在磁盘上的,但磁盘上随机访问对应的数据非常耗时,数据库程序和操作系统提供了缓冲池和内存以提高数据的访问速度


数据库读取不是以行为单位进行的,数据库从磁盘中读取文件是按页读取,然后再读取对应的数据记录;也就是说,读取所耗费的时间与行数无关,只与页数有关

在 MySQL 中,页的大小一般为 16KB,不过也可能是 8KB、32KB 或者其他值,这跟 MySQL 的存储引擎对数据的存储方式有很大的关系,文中不会展开介绍,不过索引或行记录是否在缓存池中极大的影响了访问索引或者数据的成本

   





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值