【逻辑架构】

第一层:所包含的服务并不是MySQL所独有的技术。它们都是服务于C/S程序或者是这些程序所需要的 :连接处理,身份验证,安全性等等。

第二层:通常叫做 SQL Layer。在 MySQL数据库系统处理底层数据之前的所有工作都是在这一层完成的,包括权限判断, sql解析,行计划优化, query cache 的处理以及所有内置的函数(如日期,时间,数学运算,加密)等等。各个存储引擎提供的功能都集中在这一层,如存储过程,触发器,视图等

第三层:通常叫做StorEngine Layer ,也就是底层数据存取操作实现部分,由多种存储引擎共同组成。它们负责存储和获取所有存储在MySQL中的数据。就像Linux众多的文件系统 一样。每个存储引擎都有自己的优点和缺陷。服务器是通过存储引擎API来与它们交互的。这个接口隐藏了各个存储引擎不同的地方。对于查询层尽可能的透明。这个API包含了很多底层的操作。如开始一个事务,或者取出有特定主键的行。存储引擎不能解析SQL,互相之间也不能通信。仅仅是简单的响应服务器的请求。

【查询过程】

1.客户端请求:

MySQL客户端/服务端通信协议是“半双工”的:在任一时刻,要么是服务器向客户端发送数据,要么是客户端向服务器发送数据,这两个动作不能同时发生。因而在实际开发中,尽量保持查询简单且只返回必需的数据,减小通信间数据包的大小和数量

2.查询缓存:

在解析一个查询语句前,如果缓存是打开的,那么MySQL会检查这个查询语句是否命中查询缓存中的数据。如果当前查询恰好命中查询缓存,在检查一次用户权限后直接返回缓存中的结果。这种情况下,查询不会被解析,也不会生成执行计划,更不会执行。

MySQL将缓存存放在一个引用表(不要理解成table,可以认为是类似于HashMap的数据结构),通过一个哈希值索引,这个哈希值通过查询本身、当前要查询的数据库、客户端协议版本号等一些可能影响结果的信息计算得来。所以两个查询在任何字符上的不同(例如:空格、注释),都会导致缓存不会命中。

如果查询中包含任何用户自定义函数、存储函数、用户变量、临时表、mysql库中的系统表,其查询结果都不会被缓存。比如函数NOW()

MySQL的查询缓存系统会跟踪查询中涉及的每个表,如果这些表(数据或结构)发生变化,那么和这张表相关的所有缓存数据都将失效。正因为如此,在任何的写操作时,MySQL必须将对应表的所有缓存都设置为失效。如果查询缓存非常大或者碎片很多,这个操作就可能带来很大的系统消耗,甚至导致系统僵死一会儿。而且查询缓存对系统的额外消耗也不仅仅在写操作,读操作也不例外

3.语法解析和预处理:

MySQL通过关键字将SQL语句进行解析,并生成一颗对应的解析树。这个过程解析器主要通过语法规则来验证和解析。比如SQL中是否使用了错误的关键字或者关键字的顺序是否正确等等。预处理则会根据MySQL规则进一步检查解析树是否合法。比如检查要查询的数据表和数据列是否存在等等

4.查询优化

经过前面的步骤生成的语法树被认为是合法的了,并且由优化器将其转化成查询计划。多数情况下,一条查询可以有很多种执行方式,最后都返回相应的结果。优化器的作用就是找到这其中最好的执行计划。MySQL使用基于成本的优化器,它尝试预测一个查询使用某种执行计划时的成本,并选择其中成本最小的一个。

5.查询执行引擎

在完成解析和优化阶段以后,MySQL会生成对应的执行计划,查询执行引擎根据执行计划给出的指令逐步执行得出结果。整个执行过程的大部分操作均是通过调用存储引擎实现的接口来完成,这些接口被称为handler API。查询过程中的每一张表由一个handler实例表示。实际上,MySQL在查询优化阶段就为每一张表创建了一个handler实例,优化器可以根据这些实例的接口来获取表的相关信息,包括表的所有列名、索引统计信息等。存储引擎接口提供了非常丰富的功能,但其底层仅有几十个接口,这些接口像搭积木一样完成了一次查询的大部分操作。

6.返回结果

查询执行的最后一个阶段就是将结果返回给客户端。即使查询不到数据,MySQL仍然会返回这个查询的相关信息,比如该查询影响到的行数以及执行时间等等。

【存储引擎】

查看现在提供的存储引擎: show engines;

查看现在默认使用的存储引擎:show variables like '%storage_engine%';

查看某表使用的存储引擎:show create table 表名;

InnoDB和MyISAM的区别:

InnoDB 支持事务,MyISAM 不支持事务。这是 MySQL 将默认存储引擎从 MyISAM 变成 InnoDB 的重要原因之一;

InnoDB 支持外键,而 MyISAM 不支持。对一个包含外键的 InnoDB 表转为 MYISAM 会失败;

InnoDB 是聚簇索引,MyISAM 是非聚簇索引。聚簇索引的文件存放在主键索引的叶子节点上,因此 InnoDB 必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。而 MyISAM 是非聚集索引,数据和索引是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。

InnoDB 不保存表的具体行数,执行select count(*) from table 时需要全表扫描。而 MyISAM 用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;

InnoDB 最小的锁粒度是行锁,MyISAM 最小的锁粒度是表锁。一个更新语句会锁住整张表,导致其他查询和更新都会被阻塞,因此并发访问受限。这也是 MySQL 将默认存储引擎从 MyISAM 变成 InnoDB 的重要原因之一;

mysql 架构名_MySQL 逻辑体系架构相关推荐

  1. IPSec逻辑体系架构

    以下内容摘自业界唯一一本真正从全局视角介绍网络安全系统设计的图书--<网络工程师必读--网络安全系统设计>一书.目前该书在卓越网上仅需要70折:http://www.amazon.cn/m ...

  2. mysql性能视频教程_MySQL性能管理及架构设计视频教程

    最新MySQL性能管理及架构设计视频教程 课程介绍: 数据库优化是系统工程,性能的提升靠整体.本课程将面面俱到的讲解提升数据库性能的各种因素,让你在最短的时间从小白到资深,将数据库整体架构了然于胸 . ...

  3. mysql aa复制_MySQL的复制架构与优化

    MySQL的复制架构与优化 ###########原理########### 1.主服务器将更新的数据的sql语句(例如,insert,update,delete等)写入到 二进制文件中(由log-b ...

  4. mysql双倍扩容_mysql扩展性架构实践N库到2N 库的扩容,2变4、4变8

    mysql扩展性架构实践N库到2N 库的扩容,2变4.4变8 http://geek.csdn.net/news/detail/52070 58同城 沈剑 http://www.99cankao.co ...

  5. 网站架构和Servlet技术体系架构

    一.网站架构 现在的网站架构分为 B/S架构和C/S的架构两种. B/S结构有很多好处,维护和升级方式更简单,客户端是浏览器,基本不需要维护,只需要维护升级服务器端就可以. C/S结构是一种软件系统体 ...

  6. mysql keepalived主从_mysql高可用架构之(一)基于自身主从复制&keepalived实现

    系统环境及架构 #主机名 系统版本 mysql版本 ip地址 mysqlMaster centos7.4 mysql5.7 192.168.1.42 mysqlSlave centos7.4 mysq ...

  7. lvs加MySQL读写分离_mysql高可用架构方案之二(keepalived+lvs+读写分离+负载均衡)

    mysql主从复制与lvs+keepalived实现负载高可用 文件夹 1.前言    4 2.原理    4 2.1.概要介绍    4 2.2.工作原理    4 2.3.实际作用    4 3方 ...

  8. mysql调优_MYSQL企业常用架构与调优经验分享

    一.选择Percona Server.MariaDB还是MYSQL 1.Mysql三种存储引擎 MySQL提供了两种存储引擎:MyISAM和 InnoDB,MySQL4和5使用默认的MyISAM存储引 ...

  9. mysql 主从 通俗易懂_MySQL 主从同步架构中你不知道的“坑”(完结篇)

    MySQL 主从同步架构中你不知道的"坑"(完结篇) 收录于话题 #MySQL从入门到放弃 26个 点击上方蓝字,关注我们哟! 前言导读 之前写出一篇文章也是关于这个主从同步架构的 ...

最新文章

  1. Debugging Tools for Windows__from WDK7
  2. mysql的count报错_mysql的floor()报错注入方法详细分析
  3. PHP根据IP获取当前所在地地址
  4. 【 Notes 】WLAN,Vision Positioning System,Radar
  5. 操作符和表达式的问题总结
  6. 论文阅读笔记03-fast-rcnn
  7. 任何字符串indexOf(‘‘)返回都是0,数组indexOf(‘‘)返回是-1
  8. 机器学习-吴恩达-笔记-7-机器学习系统的设计
  9. QT解析嵌套JSON表达式
  10. 相机模型与标定(十二)--opencv圆形标志点检测算法
  11. django redis
  12. 广播BroadcastReceiver(2)
  13. 知识图谱 | 阿里小蜜多模态知识图谱的构建及应用
  14. 【无标题】计算机一级考试MS OFFICE选择题题库10套及答案
  15. WPS2005 For Linux 序列号
  16. 开发一个app需要多少钱?
  17. “满五唯一”和“满二唯一”是什么?有什么不同?
  18. 训练好的vgg报错RuntimeError:mat1 and mat2 shapes cannot be multiplied(512*49 and 25088*4096)
  19. TKDE2022 | 知识图谱质量控制综述
  20. Java反射机制解读

热门文章

  1. Spring加载resource时classpath*:与classpath:的区别(转)
  2. 用C#动态创建Access数据库
  3. win32汇编基础概念
  4. C语言中指针的初始化和赋值
  5. 循环判定闰年的程序_C语言入门教程(六)for循环
  6. 则执行C语言语句unsigned,部分C语言题目
  7. linux p2p视频播放器,avplayer: 一个基于FFmpeg、libtorrent的P2P播放器实现.
  8. osg第三方插件的编译方法(以jpeg插件来讲解)
  9. 通过ADB命令获取Android手机的分辨率(升级版)
  10. linux进程通信ips,Cisco IPS 分析引擎拒绝服务漏洞(CVE-2014-0718)