Mysql架构与内部模块-第二章
接上文,上文简述到了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架构与内部模块-第二章的更多相关文章
- Mysql架构与内部模块-第一章
Mysql作为大多数中小型企业的首选数据库,也可能是众多同僚接触的第一个数据库,其热门程度不言而喻,一些相对基础的知识本系列不做赘述,主要简述Mysql相关的进阶知识. 本章将由浅入深的讲解从连接My ...
- Mysql架构与内部模块-第三章
前言 接上文,本篇文章专门简述Mysql存储引擎,内容繁多,如果你只需知道每种存储引擎的适用场景,可以直接查看本文最后列出的适用场景部分. 正文: Mysql存储引擎作为本系列文章中相对重要的一环,也 ...
- .net架构设计读书笔记--第二章 设计体系结构
第五节 探索领域架构 一.领域驱动设计的价值与意义 最初在java中使用,.net要晚些才引入.领域驱动设计出现之初的争议.一个向导,少走弯路 1. 我们真的需要DDD吗? DDD并不适用于每个软 ...
- .net架构设计读书笔记--第二章 第7节 神化般的业务层
一.编排业务逻辑的模式1. 事务脚本模式TS(The Transaction Script pattern ) TS模式概述 TS 鼓励你跳过任何的面向对象的设计,你直接到所需的用户操作的业务 ...
- 第 2 章 MySQL 架构组成
麻雀虽小,五脏俱全.MySQL 虽然以简单著称,但其内部结构并不简单.本章从MySQL物理组成.逻辑组成,以及相关工具几个角度来介绍 MySQL 的整体架构组成,希望能够让读者对 MySQL 有一个更 ...
- MySQL性能调优与架构设计——第2章 MySQL架构组成
第2章 MySQL架构组成 前言 麻雀虽小,五脏俱全.MySQL 虽然以简单著称,但其内部结构并不简单.本章从MySQL物理组成.逻辑组成,以及相关工具几个角度来介绍 MySQL 的整体架构组成, ...
- Android群英传》读书笔记 (1) 第一章 Android体系与系统架构 + 第二章 Android开发工具新接触
第一章 Android体系与系统架构 1.Dalvik 和 ARTDalvik好比是一辆可折叠的自行车,平时是折叠的,只有骑的时候,才需要组装起来用.ART好比是一辆组装好了的自行车,装好就可以骑了. ...
- 《Mysql 公司职员学习篇》 第二章 小A的惊喜
第二章 小A的惊喜 ---- 认识数据库 吃完饭后,小Y和小A回到了家里,并打开电脑开始学习Mysql. 小Y:"小A,你平时的Excell文件很多的情况下,怎么样存放Exce ...
- Mysql技术内幕-笔记-第二章 数据类型
第二章 数据类型 Mysql中尽量不要使用UNSIGNED,因为可能会带来一些意想不到的效果 SHOW CREATE TABLE tablename\G;查看表的创建语句 ZEROFILL会将宽度小于 ...
随机推荐
- Agumaster 增加雪球网爬虫
- springcloudalibaba与nacos服务注册流程图
springboot + springcloud + springcloudalibaba + nacos 服务注册流程图: springboot ①WebApplicationContext ②st ...
- 2020BJDCTF
diff: 不得不说这种题目挺有意思的,现在记录一下阶梯过程: 先登录远程,发现有两个文件: 虽然直接能卡到flag文件,但是我们是以ctf用户登录的,并不能直接打开flag文件.仔细观察diff文件 ...
- python pickle库
一.简介: 将文本信息转变为二进制数据流存储在一个文件中,便于下次使用. 二.常用函数: dump(object, file, protocol=None) 必填参数 obj 表示将要封装的对象 必填 ...
- Java格式化字符串Format
java的jdk1.5开始引用了对字符串的格式化处理,类似于C语言的printf("%d,%d",a,b);,对数据的处理非常方便,之所以有这样的方式输出,很多人说是为了抢夺C语言 ...
- jmeter远程调用
jmeter版本相同 JDK版本1.7以上 脚本文件在所有机器上的路径都一致 修改远程机器jmeter bin目录下的jmeter.properties文件配置:server_port=1001 多个 ...
- jmeter压测以及用Badboy录脚本
一.压测时的基本配置: 1.设置线程数.延迟几秒.循环次数打勾表示一直去循环.调度器打勾可以填写持续时间.启动时间等 线程数:就是并发的用户数 N Ramp-Up Period(in second ...
- 如何使用dockerfile将jar包生成镜像
1.编写dockersfile FROM java:8 ADD SPRINGCLOUD.jar app.jar RUN bash -c ‘touch /app.jar’ ENTRYPOINT [&qu ...
- appium的基本环境配置
1.先安装jdk1.7或jdk1.8之后,并配置好环境变量 2.安装Android SDK(安卓软件开发包),测试Android手机必然要安装Android SDK,例如android-sdk_r24 ...
- CountDownLatch、CyclicBarrier
CountDownLatch CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能.比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行 ...