接上文,上文简述到了Mysql中的查询缓存和解析器,今日我们继续。

先来看一段SQL:SELECT * FROM `jianghuadong`;

先假设我们数据库中并没有一张名为jianghuadong的表,那么这句语句的执行结果是?

首先,这句SQL肯定格式上是没有任何问题的,问题在于查询的表不存在。也就是你的SQL从语义上存在问题。

预处理器

根据以上情况,预处理器会确保欲执行的SQL从语义上没有错误,比如:表名,别名,权限等几个方面去确保SQL正确。

别名错误举例:SELECT b FROM `jianghuadong` as a;

权限就是比如你的当前账号只有SELECT权限,但是你打算执行一条UPDATE语句,那么预处理器会阻止你干这件蠢事。

至此,我们的图在增加一个模块:

优化器

思考一个问题,给出一条SQL语句:SELECT * FROM `member_info` WHERE age > 21 and sex = 1;

这条SQL语句由客户端发送到Mysql Server ,是否Server在真正执行的时候,一定就是这条语句?

实际上,Mysql Server在执行之前,会有一个叫做优化器的组件,对你的SQL进行优化重组,列出尽可能多的语句,然后选择优化器认为最优(基于成本)的一条进行执行,但是返回的结果

肯定是与你发送给Mysql Server的执行结果是一致的。

不只是Mysql,市面上的数据库基本都包含优化器模块。

优化器最主要的作用是优化,比如当你需要联合查询的时候,SELECT a from a join b ...; 这个时候,到底是先查询a表还是b表,是由优化器决定的。

其次,优化器还决定了索引的选择,当一张表存在多个索引的时候,查询时使用哪个索引,也是由优化器决定。

当你的SQL经过优化器进行了一系列的优化后,会生成一个叫做执行计划的数据结构,到底先查询哪张表,使用哪个索引。

实际上,这个执行计划我们是可以查看的,在SQL语句前加入 EXPLAIN 命令,举例说明:

查询member_info表,可以看到结果中有很多列,包含预计使用索引,实际使用索引等等,这些列的含义我们后面会详细说明,此处只是简单介绍执行计划的作用。

如果你是5.7以上版本,可以添加上FORMAT=JSON执行:EXPLAIN FORMAT=JSON SELECT * FROM member_info; 查看更加详细的信息。

思考一个问题:我们在Mysql上的数据,到底是放在哪里?

从我们的角度,或者逻辑上来说,是放在表中,也可以说是文件。

存储引擎

存储引擎是Mysql中比较重要的一环,内容较多,我们另开一章专门聊聊存储引擎。

Mysql架构与内部模块-第二章的更多相关文章

  1. Mysql架构与内部模块-第一章

    Mysql作为大多数中小型企业的首选数据库,也可能是众多同僚接触的第一个数据库,其热门程度不言而喻,一些相对基础的知识本系列不做赘述,主要简述Mysql相关的进阶知识. 本章将由浅入深的讲解从连接My ...

  2. Mysql架构与内部模块-第三章

    前言 接上文,本篇文章专门简述Mysql存储引擎,内容繁多,如果你只需知道每种存储引擎的适用场景,可以直接查看本文最后列出的适用场景部分. 正文: Mysql存储引擎作为本系列文章中相对重要的一环,也 ...

  3. .net架构设计读书笔记--第二章 设计体系结构

    第五节 探索领域架构 一.领域驱动设计的价值与意义 最初在java中使用,.net要晚些才引入.领域驱动设计出现之初的争议.一个向导,少走弯路   1. 我们真的需要DDD吗? DDD并不适用于每个软 ...

  4. .net架构设计读书笔记--第二章 第7节 神化般的业务层

    一.编排业务逻辑的模式1. 事务脚本模式TS(The Transaction Script pattern ) TS模式概述     TS 鼓励你跳过任何的面向对象的设计,你直接到所需的用户操作的业务 ...

  5. 第 2 章 MySQL 架构组成

    麻雀虽小,五脏俱全.MySQL 虽然以简单著称,但其内部结构并不简单.本章从MySQL物理组成.逻辑组成,以及相关工具几个角度来介绍 MySQL 的整体架构组成,希望能够让读者对 MySQL 有一个更 ...

  6. MySQL性能调优与架构设计——第2章 MySQL架构组成

    第2章 MySQL架构组成 前言   麻雀虽小,五脏俱全.MySQL 虽然以简单著称,但其内部结构并不简单.本章从MySQL物理组成.逻辑组成,以及相关工具几个角度来介绍 MySQL 的整体架构组成, ...

  7. Android群英传》读书笔记 (1) 第一章 Android体系与系统架构 + 第二章 Android开发工具新接触

    第一章 Android体系与系统架构 1.Dalvik 和 ARTDalvik好比是一辆可折叠的自行车,平时是折叠的,只有骑的时候,才需要组装起来用.ART好比是一辆组装好了的自行车,装好就可以骑了. ...

  8. 《Mysql 公司职员学习篇》 第二章 小A的惊喜

          第二章 小A的惊喜  ---- 认识数据库 吃完饭后,小Y和小A回到了家里,并打开电脑开始学习Mysql. 小Y:"小A,你平时的Excell文件很多的情况下,怎么样存放Exce ...

  9. Mysql技术内幕-笔记-第二章 数据类型

    第二章 数据类型 Mysql中尽量不要使用UNSIGNED,因为可能会带来一些意想不到的效果 SHOW CREATE TABLE tablename\G;查看表的创建语句 ZEROFILL会将宽度小于 ...

随机推荐

  1. Agumaster 增加雪球网爬虫

  2. springcloudalibaba与nacos服务注册流程图

    springboot + springcloud + springcloudalibaba + nacos 服务注册流程图: springboot ①WebApplicationContext ②st ...

  3. 2020BJDCTF

    diff: 不得不说这种题目挺有意思的,现在记录一下阶梯过程: 先登录远程,发现有两个文件: 虽然直接能卡到flag文件,但是我们是以ctf用户登录的,并不能直接打开flag文件.仔细观察diff文件 ...

  4. python pickle库

    一.简介: 将文本信息转变为二进制数据流存储在一个文件中,便于下次使用. 二.常用函数: dump(object, file, protocol=None) 必填参数 obj 表示将要封装的对象 必填 ...

  5. Java格式化字符串Format

    java的jdk1.5开始引用了对字符串的格式化处理,类似于C语言的printf("%d,%d",a,b);,对数据的处理非常方便,之所以有这样的方式输出,很多人说是为了抢夺C语言 ...

  6. jmeter远程调用

    jmeter版本相同 JDK版本1.7以上 脚本文件在所有机器上的路径都一致 修改远程机器jmeter bin目录下的jmeter.properties文件配置:server_port=1001 多个 ...

  7. jmeter压测以及用Badboy录脚本

    一.压测时的基本配置: 1.设置线程数.延迟几秒.循环次数打勾表示一直去循环.调度器打勾可以填写持续时间.启动时间等 线程数:就是并发的用户数   N Ramp-Up Period(in second ...

  8. 如何使用dockerfile将jar包生成镜像

    1.编写dockersfile FROM java:8 ADD SPRINGCLOUD.jar app.jar RUN bash -c ‘touch /app.jar’ ENTRYPOINT [&qu ...

  9. appium的基本环境配置

    1.先安装jdk1.7或jdk1.8之后,并配置好环境变量 2.安装Android SDK(安卓软件开发包),测试Android手机必然要安装Android SDK,例如android-sdk_r24 ...

  10. CountDownLatch、CyclicBarrier

    CountDownLatch CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能.比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行 ...