MySQL学习之路(三)

MySQL学习之路(三)

MySQL调优的知识

本质:数据库查询慢的原因是因为IO阻塞(操作硬盘)
在这里插入图片描述
相当于一个同心圆,在同一个园上旋转速度很快(旋转),但是要先寻找是哪一个圆(寻道),所以需要创建索引来迅速找到是哪一条道路;

在这里插入图片描述

一、索引优化

作用:提高访问效率,是一种数据结构

增加索引SQL语句
在这里插入图片描述
为了优化速度,最好走索引

1、mysql查询底层架构
在这里插入图片描述
2、背景

当mysql到执行器的那一步会涉及到IO操作,所以必须优化IO操作
在这里插入图片描述
所以引入了索引

3、索引的数据结构选择
在这里插入图片描述
mysql选择B+树这个数据结构,选择这个结构的优势在于层数较少遍历快,并且对于B树来说把每层的data数据放在了最底层,其他层可以节约空间放更多的索引数(因为每一页只能存放16kb数据),一般层数为3或4层,层数不是自己决定的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

4、索引的基础知识
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第二条语句无法匹配,因为无法找到name的key,所以无法进行后续匹配
在这里插入图片描述
什么叫存储引擎:存储是将数据落在磁盘的过程,分为innodb(直接上数据)和mysam(储存地址)

面试问题:为什么数据库逐渐都要自增(是为了维护索引,防止页分裂),因为B+树是有序的,元素值的添加可能会影响整个树的结构或者层数

5、索引使用相关细节

(1)or条件下不走索引
在这里插入图片描述
(2)or语句但是id和name都是索引可以使用union关键词
在这里插入图片描述
(3)最左匹配原则(复合索引,辅助索引)

当有两个及以上的时候,需要最左匹配,不然无法走索引

(4)优化分页
在这里插入图片描述

二、性能监控

作用:在执行ssql语句的时候,可以用性能监控来看运行时间

set profiling=1   -- 打开
show profiles     --查看使用时间
show profiles     --查看每一步使用了多少时间  (已经弃用)
使用performance schema数据库来监控mysql

三、schema与数据库类型优化

1、数据类型优化

(1)在可以的情况下,使用占用内存小的数据类型;(int与char等,尽量避免null;

(2)合理使用范式与反范式,解决数据冗余问题;

(3)主键的选择,使用与业务无关的代理主键;

(4)字符集的选择;

(5)存储引擎的选择:MYSAM(储存的数据地址非聚集索引)、INoDB(直接在节点中储存数据聚集索引)

(6) 少用 * 用具体的字段,
在这里插入图片描述

四、执行计划

explain select*from t_student

在这里插入图片描述
可以使用执行计划来查看数据库查询语句所耗费的性能,比如是否是全盘扫描,是否走了索引

六、主从复制和读写分离

1、为什么要主从复制读写分离?

主从复制:是一种数据备份的方案。
简单来说,是使用两个或两个以上相同的数据库,将一个数据库当做主数据库,而另一个数据库当做从数据库。在主数据库中进行相应操作时,从数据库记录下所有主数据库的操作,使其二者一模一样。

读写分离:是一种让数据库更稳定的的使用数据库的方法。
是在有从数据库的情况下使用,当主数据库进行对数据的增删改也就是写操作时,将查询的任务交给从数据库。

为什么要使用主从分离和读写操作呢?
主从复制:①当主数据库出现问题时,可以当从数据库代替主数据库,可以避免数据的丢失。②可以进行读写分离

读写分离:①避免从数据库进行写操作而导致的主从数据库数据不一致的情况,因为当主从数据库数据不一致时,那么从数据库最主要的备份任务就没有意义了。②减轻主数据库的压力。因为进行写操作更耗时,所以如果不进行读写分离的话,写操作将会影响到读操作的效率。

2、主从复制原理

(1)主数据库(master)在每个事务更新数据完成之后,主数据库(master)在二进制日志记录这些改变。

(2)从数据库(slave)开启一个I/O线程,读取主数据库(master)的二进制日志文件,然后写入到从数据库(slave)的中继日志。I/O线程会在master打开一个连接,从数据库I/O线程从主数据库
(master)的二进制日志中读取事件,如果已经连接上,它会睡眠并等待主数据库(master)产生新的事件,I/o线程将这些事件写入到中继日志。I/O一般缓存在OS上,系统开销比较小。

(3)从数据库SQL线程读取中继日志中的事件,并重放其中的事件,更新从数据库的数据,保证主从复制的数据一致性。

如果看完对自己有所帮助,请点赞支持,谢谢大家

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值