接上文,上文简述到了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. [oracle/sql]关于清除重复,not in方案和not exists方案的对比

    有这样一张表: CREATE TABLE tb_sc ( id NUMBER not null primary key, studentid int not null, courseid int no ...

  2. sql注入 --显错注入

    前提知识 数据库:就是将大量数据把保存起来,通过计算机加工而成的可以高效访问数据库的数据集合数据库结构:库:就是一堆表组成的数据集合表:类似 Excel,由行和列组成的二维表字段:表中的列称为字段记录 ...

  3. [Binder深入学习二]Binder驱动——基础数据结构二

    Userspace和KernelSpace进行交互时,大部分命令是通过 ioctl 实现的,在这个过程中,最重要的一个便是 BINDER_WRITE_READ 命令了. #define BINDER_ ...

  4. Gradle系列之Android Gradle基础配置

    原文发于微信公众号 jzman-blog,欢迎关注交流. 通过前面几篇文章学习了 Gradle 基础知识以及 Gradle 插件相关的知识,关于 Gradle 及其插件相关知识请先阅读下面几篇文章: ...

  5. top、ps -ef、ps aux的区别及内容详解

    1.top和ps的区别 ps是静态查看进程--------top是动态(持续监控)进程 ps只是查看进程-----------top还可以监视系统性能,如平均负载,cpu和内存的消耗 2.ps -ef ...

  6. java执行器

    Executor 执行已提交的 Runnable 任务对象.此接口提供一种将任务提交与每个任务将如何运行的机制(包括线程使用的细节.调度等)分离开来的方法.Executor 接口并没有严格地要求执行是 ...

  7. 相同宿主机下的dcoker之间通信

    相同宿主机下的dcoker之间通信 docker docker的本质是进程,隔离的资源包括:网卡.回环设备.路由表和 iptables 规则,这些要素构成了一个进程(docker)发起和响应网络请求的 ...

  8. Java基础一篇过(七)Java8--stream流

    一.简介 流(stream)也是Java8的一个重要的新特性,主要是对集合(Collector)功能的增强:在上一篇文章我们简单的了解了lambda表达式,现在我们学习下流的概念:使用流可以帮助我们做 ...

  9. C语言实现顺序表的基本操作(从键盘输入 生成线性表,读txt文件生成线性表和数组生成线性表----三种写法)

    经过三天的时间终于把顺序表的操作实现搞定了.(主要是在测试部分停留了太长时间) 1. 线性表顺序存储的概念:指的是在内存中用一段地址连续的存储单元依次存储线性表中的元素. 2. 采用的实现方式:一段地 ...

  10. AI小白必读:深度学习、迁移学习、强化学习别再傻傻分不清

    摘要:诸多关于人工智能的流行词汇萦绕在我们耳边,比如深度学习 (Deep Learning).强化学习 (Reinforcement Learning).迁移学习 (Transfer Learning ...