SQL高级优化(二)之MySQL架构
一、架构
想要学好SQL优化就必须从对应数据库的基本架构开始学习
- 架构图如下

二、架构分析
MySQL有连接池(Connection Pool)管理客户端的连接。客户端连接会验证用户名、密码、主机信息等。
缓存中存储了SQL命令的HASH,直接比对SQL命令的HASH和缓存中key是否对应,如果对应,直接返回结果,不在执行其他操作。由于缓存的是SQL的HASH,所以根据Hash特性SQL中空格等内容必须完全一样。缓存里面包含表缓存、记录缓存、权限缓存等。查询语句执行完成后会把查询结果缓存到缓存中。查询缓存的目的是提高查询性能,缺点是做删除修改时影响性能,适合在大量查询很少修改情况时使用。
- 2.1 在MySQL5.7中查询缓存默认不开启。可以通过
SHOW VARIABLES LIKE '%query_cache%
- 2.2 参数中query_cache_type 设置是否开启查询缓存
- 0(OFF):关闭Query Cache功能,任何情况下都不会使用Query Cache;
- 1(ON):开启Query Cache功能,但是当SELECT语句中使用SQL_NO_CACHE体会后,将不使用Query Cache;
- 2(DEMAND):开启Query Cahce功能,但是只有当SELECT语句中使用了SQL_CACHE提示后,才是用Query Cache。
- 可以通过修改my.ini或命令设置是否开启查询缓存(此命令在Navicat中可能不可用,需要去命令行设置)
set global query_chache_type = 1;
- 2.3 query_cache_size 设置查询缓存大小,默认为0
- 可以通过下面命令设置、如果设置值太小会导致查询缓存不可用。
set global query_cache_size = 134217728;
- 可以通过查看缓存被使用次数查看是否使用缓存
show status like '%Qcache%';

- Qcache_queries_in_cache 当前缓存中数量
- Qcache_insert 插入到缓存中总数
- Qcache_hits 缓存命中数
- Qcache_lowmem_prunes 由于缓存较小,从缓存中山川的查询数量
- Qcache_not_cached 没有被缓存的次数
三、SQL命令执行流程

- 1、客户端向服务器发送SQL命令。
- 2、服务器端连接模块连接并验证。
- 3、缓存模块解析SQL为Hash并与缓存中Hash表对应。如果有结果直接返回结果,如果没有对应继续向下执行。
- 4、解析器解析SQL为解析数,如果出现错误,包SQL解析错误。如果正确,向下传递。
- 5、预处理器对解析数继续处理,处理成新的解析树。
- 6、优化器根据开销自动选择最优执行计划,生成执行计划。
- 7、执行器执行秩相关计划,访问存储引擎接口。
- 8、存储引擎访问物理文件并返回结果。
- 9、如果开启缓存迷魂村管理器把结果放入查询缓存中。
- 10、返回结果给客户端。
SQL高级优化(二)之MySQL架构的更多相关文章
- SQL高级优化系列
目录 SQL高级优化系列(一)之MySQL优化 SQL高级优化系列(二)之MySQL架构 SQL高级优化系列(三)之存储引擎 SQL高级优化系列(四)之SQL优化 SQL高级优化系列(五)之执行计划 ...
- SQL高级优化(一)之MySQL优化
不同方案效率对比 MySQL各字段默认长度(一字节为8位) 整型: TINYINT 1 字节 SMALLINT 2 个字节 MEDIUMINT 3 个字节 INT 4 个字节 INTEGER 4 个字 ...
- SQL高级优化(六)之MySQL索引
一.索引概述 1. 索引的优点 为什么要创建索引?这是因为,创建索引可以大大提高系统的查询性能.如果不使用索引,查询时从第一行开始查询.如果使用了索引,所以就可以更加快速的找到希望的数据. 第一. ...
- SQL高级优化(五)之执行计划
一.explain 执行计划:在MySQL中可以通过explain关键字模拟优化器执行SQL语句,从而知道MySQL是如何处理SQL语句的. explain:MySQL执行计划的工具,查看MySQL如 ...
- SQL高级优化(四)之SQL优化
SQL优化 一.SQL优化简介 解释:对于特定的要求,使用更有的SQL策略或索引策略,以达到让结果呈现的时间更短,从而提升操作效率的过程就是SQL优化. SQL优化包含在数据库级别优化中.我们平常所说 ...
- SQL高级优化(三)之存储引擎
一.MySQL数据库引擎简介 1. ISAM(indexed Sequential Access Method) ISAM 是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到数据 ...
- SQL语句优化 (二) (53)
接上一部分 (4)如果不是索引列的第一部分,如下例子:可见虽然在money上面建有复合索引,但是由于money不是索引的第一列,那么在查询中这个索引也不会被MySQL采用. mysql> exp ...
- sql语句优化(二)
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 建立索引好处 : 之前做的一个项目 , 一个查询10w多条的数据 ,需要20s ,后来加 ...
- SQL学习笔记二之MySQL的数据库操作
阅读目录 一 系统数据库 二 创建数据库 三 数据库相关操作 一 系统数据库 information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息.列信息.权限 ...
随机推荐
- 7、Redis五大数据类型---集合(Set)
一.集合(Set)简介 Set是string类型的无序集合.集合成员是唯一的,这就意味着集合中不能出现重复的数据. Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1). ...
- Windows下mongodb的安装和配置
1----->下载地址:https://www.mongodb.com/dr/fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl ...
- mysql--求中位数
第一种求中位数方法: /* 第一步:添加一个正序和反序 第二步:当列表数目为奇数的时候,列表选出的情况,当列表为偶数的时候列表的情况 第三步:统筹奇数和偶数时中位数 */ select sum(Mat ...
- 使用NTP原理进行时间同步
在一些物联网企业,平台会和嵌入式一起配合进行工作. 有时平台会希望嵌入式这边不使用现成的NTP方案自己去同步时间,而希望以平台下发的时间为准. 此时就有两个方案. 方案1. 平台下发一个时间戳tim ...
- 批处理文件 .bat 并行Arcpy脚本提高效率的思路-提升版
目录 前言 Arcpy脚本 导入库 函数定义 循环实现 批处理(.bat)脚本 前言 我在之前的博客园博客里,阐述了如何编写Arcpy脚本,如何利用Windows bat批处理脚本同时打开多个cmd窗 ...
- TensorFlow.NET机器学习入门【2】线性回归
回归分析用于分析输入变量和输出变量之间的一种关系,其中线性回归是最简单的一种. 设: Y=wX+b,现已知一组X(输入)和Y(输出)的值,要求出w和b的值. 举个例子:快年底了,销售部门要发年终奖了, ...
- 20款GitHub上优秀的Go开源项目
docker 无人不知的虚拟华平台,开源的应用容器引擎,借助该引擎,开发者可以打包他们的应用,移植到任何平台上. https://github.com/docker/docker 38154 star ...
- Ubuntu Server服务器上架设Git Server服务器
1.设置公钥 ubuntu:/home/git$ ssh-keygen -t rsa #生成密钥 这里会提示输入密码,我们不输入直接回车即可. 然后用刚生成公钥/home/git/.ssh/id_rs ...
- 【LeetCode】1060. Missing Element in Sorted Array 解题报告 (C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 遍历 日期 题目地址:https://leetcode ...
- 【LeetCode】1033. Moving Stones Until Consecutive 解题报告(C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 脑筋急转弯 日期 题目地址:https://leet ...