接上文,上文简述到了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. 转贴:110个Oracle 函数

    转载地址:https://bbs.csdn.net/topics/310021870 1. ASCII返回与指定的字符对应的十进制数;SQL> select ascii(A) A,ascii(a ...

  2. 在Oracle中十分钟内创建一张千万级别的表

    小表不会产生性能问题,大表才会.要练习SQL调优,还非得有大表不可.但数据不会自然产生,没有数据时如何创建一张千万级别的大表呢? 之前,我想用Oracle的批量插入语法去插入数据,此语法如下: INS ...

  3. Tomcat源码分析(类加载与类加载器)

    Tomcat的挑战 Tomcat上可以部署多个项目 Tomcat的一般部署,可以通过多种方式启动一个Tomcat部署多个项目,那么Tomcat在设计时会遇到什么挑战呢? Tomcat运行时需要加载哪些 ...

  4. webstorm单标签设置成双标签展开解决iview中col展开问题

    大家好!我是木瓜太香,今天给大家带来一个 webstorm 小技巧 场景:有使用过 vue 框架并且使用 iview 做 ui webstorm 做 ide 的同学,可能会遇到一个比较奇怪的问题,iv ...

  5. Readme for Software engineering

    作业任务: 软件工程 软件工程 作业要求 作业要求 作业目标 博客园.github注册 自我介绍 软工5问 自我介绍: 广东工业大学计算机学院18级信息安全二班 广东工业大学AD攻防工作室成员& ...

  6. 关于HTML基本标签,了解一下!

    目录 1 前言 2 正文 2.1 HTML文档结构 2.1.1 html标签 2.1.2 head标签 2.1.3 title标签 2.1.4 body标签 2.2 HTML常用标签 2.2.1 换行 ...

  7. js中页面加载完成后执行的几种方法及执行顺序

    在js和jquery使用中,经常使用到页面加载完成后执行某一方法.通过整理,大概是五种方式(其中有的只是书写方式不一样). 1:使用jQuery的$(function){}; 2:使用jquery的$ ...

  8. 【原创】Kuberneters-HelmV3.3.1入门介绍及实践

    一.为什么需要Helm? Kubernetes目前已成为容器编排的事实标准,随着传统架构向微服务容器化架构的转变,从一个巨大的单体的应用切分为多个微服务,每个微服务可独立部署和扩展,实现了敏捷开发和快 ...

  9. zabbix邮件报警设置(加密)

    邮件设置如下 端口号选择465

  10. windows服务器添加磁盘后,提示The disk is offline because of policy set by an administrator的解决办法

    操作系统:Windows Server 2008 R2 Enterprise 事件:存储在虚拟机上添加三块磁盘,笔者准备扩展到E盘(动态分区) 问题:存储团队添加磁盘后,OS的磁盘管理界面,看到提示, ...