一、架构

想要学好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. 一文详解 纹理采样与Mipmap纹理——构建山地渲染效果

    在开发一些相对较大的场景时,例如:一片铺满相同草地纹理的丘陵地形,如果不采用一些技术手段,就会出现远处的丘陵较近处的丘陵相比更加的清晰的视觉效果,而这种效果与真实世界中近处的物体清晰远处物体模糊的效果 ...

  2. [BUUCTF]REVERSE——[WUSTCTF2020]Cr0ssfun

    [WUSTCTF2020]Cr0ssfun 附件 步骤: 例行检查,无壳儿,64位程序,直接ida载入,检索程序里的字符串,根据提示跳转 看一下check()函数 内嵌了几个检查的函数,简单粗暴,整理 ...

  3. 使用bochs调试汇编程序

    使用bochs调试汇编程序 前面我们已经搭建好了bochs的环境,并且将我们的汇编程序写入了硬盘里面,现在我们来看看如何通过bochs来调试我们的程序. 前文:https://www.cnblogs. ...

  4. 除了背八股文,Java面试更该这样准备

    我可以这样说,哪怕你背了再多java八股文的答案,过面试也能靠运气,因为很多java面试的答案只限于技术理论说辞.但用我本文给出的方法去准备面试,能在不提升技术的前提下,大大提升你java面试的通过率 ...

  5. .Net Core 项目发布在IIS上 访问404 问题对应

    对策: 1.进入线程池画面,将当前程序的线程池设为"无托管代码"   2.修改配置文件 Web.config,加上配置   原因: 因为.NetCore 5.0 自带集成了Swag ...

  6. github访问慢处理办法

    Windows 系统:C:\Windows\System32\drivers\etc\hostsLinux 系统:/etc/hostsMac(苹果电脑)系统:/etc/hostsAndroid(安卓) ...

  7. 【LeetCode】1. Two Sum 两数之和

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人公众号:负雪明烛 本文关键词:two sum, 两数之和,题解,leetcode, 力 ...

  8. 1087 - Diablo

      1087 - Diablo    PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 64 MB All of ...

  9. Certified Adversarial Robustness via Randomized Smoothing

    目录 概 主要内容 定理1 代码 Cohen J., Rosenfeld E., Kolter J. Certified Adversarial Robustness via Randomized S ...

  10. Rank & Sort Loss for Object Detection and Instance Segmentation 论文解读(含核心源码详解)

    第一印象 Rank & Sort Loss for Object Detection and Instance Segmentation 这篇文章算是我读的 detection 文章里面比较难 ...