MySQL性能优化(2)

MySQL逻辑架构

在这里插入图片描述

连接层

当MySQL启动,等待客户端连接,每一个客户端连接请求,服务器都会创建一个线程处理(如果是线程池的话,则分配一个空线程),每个线程独立,拥有各自的内存处理空间。当两个线程同时修改一块内存的时候,会引发数据同步问题。
在这里插入图片描述
连接创立之后,服务器需要对其进行验证,一旦连接成功,还要验证是否具有执行某个特定查询的权限(例如,是否允许客户端对某个数据库某个表的某个操作)
在这里插入图片描述

处理层

在这一层中,有SQL接口,转换器,优化器,缓存等组件。

这一层主要功能有:解析、优化SQL语句,查询缓存,实现MySQL内置函数,跨存储引擎功能,如:存储过程,触发器,视图。

1.如果是查询语句,首先会查询缓存是否已有相应结果

思考:
MyBatis中有缓存,MySQL中同样有缓存
数据库和后端代码中的缓存在作用上有什么区别?是否重复?对性能有什么影响?

 show variables like '%query_cache_type%'

在这里插入图片描述
缓存默认是关闭的,因为仅能缓存同样查询语句。功能可以被redis代替,且起作用的时候很少。默认1M

缓存部分有buffer(仅innodb使用)和cache两种,这篇博文写的比较详细
https://www.cnblogs.com/qiaoyanlin/p/6746791.html
1、Buffer(缓冲区)是系统两端处理速度平衡(从长时间尺度上看)时使用的。它的引入是为了减小短期内突发I/O的影响,起到流量整形的作用。比如生产者——消费者问题,他们产生和消耗资源的速度大体接近,加一个buffer可以抵消掉资源刚产生/消耗时的突然变化。
2、Cache(缓存)则是系统两端处理速度不匹配时的一种折衷策略。因为CPU和memory之间的速度差异越来越大,所以人们充分利用数据的局部性(locality)特征,通过使用存储系统分级(memory hierarchy)的策略来减小这种差异带来的影响。

2.解析查询,创建一个内部数据结构(解析树),这个解析树主要用来SQL语句的语义和语法解析

解析树的原理?实现?
在这里插入图片描述

3.优化:优化SQL语句,例如重写查询,决定表的读取顺序,以及选择需要的缩影等。这一阶段用户可以查询到优化器如何进行优化。即explain() 优化器会询问存储引擎,比如某个操作的开销信息,是否对特定索引有查询优化等。

子查询和inner join相比?
在这里插入图片描述

引擎层

在这里插入图片描述

存储层

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值