一、架构

想要学好SQL优化就必须从对应数据库的基本架构开始学习

  • 架构图如下

二、架构分析

1. 连接管理与安全验证

​     MySQL有连接池(Connection Pool)管理客户端的连接。客户端连接会验证用户名、密码、主机信息等。

2. 缓存(Cache&Buffer):

​     缓存中存储了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架构的更多相关文章

  1. SQL高级优化系列

    目录 SQL高级优化系列(一)之MySQL优化 SQL高级优化系列(二)之MySQL架构 SQL高级优化系列(三)之存储引擎 SQL高级优化系列(四)之SQL优化 SQL高级优化系列(五)之执行计划 ...

  2. SQL高级优化(一)之MySQL优化

    不同方案效率对比 MySQL各字段默认长度(一字节为8位) 整型: TINYINT 1 字节 SMALLINT 2 个字节 MEDIUMINT 3 个字节 INT 4 个字节 INTEGER 4 个字 ...

  3. SQL高级优化(六)之MySQL索引

    一.索引概述 1. 索引的优点 ​ 为什么要创建索引?这是因为,创建索引可以大大提高系统的查询性能.如果不使用索引,查询时从第一行开始查询.如果使用了索引,所以就可以更加快速的找到希望的数据. 第一. ...

  4. SQL高级优化(五)之执行计划

    一.explain 执行计划:在MySQL中可以通过explain关键字模拟优化器执行SQL语句,从而知道MySQL是如何处理SQL语句的. explain:MySQL执行计划的工具,查看MySQL如 ...

  5. SQL高级优化(四)之SQL优化

    SQL优化 一.SQL优化简介 解释:对于特定的要求,使用更有的SQL策略或索引策略,以达到让结果呈现的时间更短,从而提升操作效率的过程就是SQL优化. SQL优化包含在数据库级别优化中.我们平常所说 ...

  6. SQL高级优化(三)之存储引擎

    一.MySQL数据库引擎简介 1. ISAM(indexed Sequential Access Method) ​ ISAM 是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到数据 ...

  7. SQL语句优化 (二) (53)

    接上一部分 (4)如果不是索引列的第一部分,如下例子:可见虽然在money上面建有复合索引,但是由于money不是索引的第一列,那么在查询中这个索引也不会被MySQL采用. mysql> exp ...

  8. sql语句优化(二)

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 建立索引好处  : 之前做的一个项目 , 一个查询10w多条的数据 ,需要20s ,后来加 ...

  9. SQL学习笔记二之MySQL的数据库操作

    阅读目录 一 系统数据库 二 创建数据库 三 数据库相关操作 一 系统数据库 information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息.列信息.权限 ...

随机推荐

  1. Spring Cloud Alibaba 整合 Nacos 实现服务配置中心

    在之前的文章 <Nacos 本地单机版部署步骤和使用> 中,大家应该了解了 Nacos 是什么?其中 Nacos 提供了动态配置服务功能 一.Nacos 动态配置服务是什么? 官方是这么说 ...

  2. Hadoop期末复习

    Hadoop期末复习 选择题 以下选项中,哪个程序负责HDFS数据存储. B A.NameNode B.DataNode C.Secondary NameNode D.ResourceManager ...

  3. 2020KCTF秋季赛签到题

    比赛平台:https://ctf.pediy.com/game-season_fight-158.htm 开场 签到题 例行检查,64位程序,无壳 试运行一下,看看大概的情况 64位ida载入,根据运 ...

  4. [BUUCTF]REVERSE——[FlareOn4]login

    [FlareOn4]login 附件 步骤: 是个网页,直接打开,查看网页源码 百度了几个函数 charCodeAt(0)是返回当前字符的Unicode 编码 String.fromCharCode返 ...

  5. HGAME pwn ROP_LEVEL2

    花了好多天,终于把这个题彻底弄懂了...自己太菜了    下载文件,首先checksec检查一下保护. 只开启了堆栈不可执行,接下来拖到IDA看一下C的伪代码. 大致先让你输入,然后再次让你输入. 第 ...

  6. 拆分行(Power Query 之 M 语言)

    数据源: 略 目标: 将指定列拆分为行 操作过程: 选取指定列>[主页](或[转换])>[拆分列]>[按分隔符]/[按字符数]/[按位置]>高级选项>拆分为[行] M公式 ...

  7. 筛选(Project)

    <Project2016 企业项目管理实践>张会斌 董方好 编著 [视图]选项卡下有个[筛选器],筛选功能就在里面实现. 比如按[里程碑]筛选. 按[日期范围],再指定个起始日期和结束日期 ...

  8. 如何把整张表格的数据通过form表单的方式传回后台

    开发背景: 前段时间遇到这么一个需求,就是把一整张表格的数据存储在数据库中,之后再渲染在页面中,还可以进行重新编辑. 例如下边的课程表(为了方便,所以都是软件工程). 我也是经过一段时间的思考,才实现 ...

  9. CF205A Little Elephant and Rozdil 题解

    Content 有一头小象住在 \(\texttt{Rozdil}\) 小镇里,它想去其他的小镇旅行. 这个国家一共有 \(n\) 个小镇,第 \(i\) 个小镇距离 \(\texttt{Rozdil ...

  10. CF1547B Alphabetical Strings 题解

    Content 我们有一个空的字符串,第 \(i\) 次操作我们可以将字母表中第 \(i\) 个字母加入字符串的最前面或最后面.我们称一个长度为 \(n\) 的字符串是合法的,当且仅当这个字符串可以通 ...