1、MySQL逻辑架构介绍
MySQL的逻辑架构分为四层
(1)连接层
主要完成一些类似连接处理,授权认证及相关的安全方案,在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。
(2)服务层
这是MySQL的核心部分,通常叫做SQL Layer,在MySQL数据库系统处理底层各种数据之前的所有工作都是在这一层完成的,包括权限判断,SQL接口,SQL解析,SQL分析优化等,缓存查询的处理以及部分内置函数执行(如日期,时间,数学运算,加密)等等。各个存储引擎提供的功能都集中在这一层,如存储过程,触发器,视图等。
(3)引擎层
- 引擎层是底层数据存取操作实现的部分,由多种存储引擎共同组成,真正负责MySQL中数据的存储和提取。就像Linux众多的文件系统一样。每个存储引擎都有自己的优点和缺陷。服务器是通过存储引擎API来与他们交互的。这个接口隐藏了各个存储引擎不同的地方。对于查询层尽可能的透明。这个API包含了很多底层的操作。如开始一个事物,或者取出有特定主键的行。存储引擎不能解析SQL,互相之间也不能通信。仅仅是简单的响应服务器 的请求。
- 存储引擎接口模块可以说是 MySQL 数据库中最有特色的一点了。目前各种数据库产品中,基本上只有 MySQL 可以实现其底层数据存储引擎的插件式管理。这个模块实际上只是 一个抽象类,但正是因为它成功地将各种数据处理高度抽象化,才成就了今天 MySQL 可插拔存储引擎的特色。
在MySQL中主要使用的是MyISAM引擎和InnDB引擎:
对比 | MyISAM | InnoDB |
---|---|---|
主外键 | 不支持 | 支持 |
事务 | 不支持 | 支持 |
行表锁 | 表锁 | 行锁 |
缓存 | 只缓存索引,不缓存真实数据 | 不仅缓存索引还要缓存真实数据 |
表空间 | 小 | 大 |
关注点 | 性能 | 事务 |
(4)存储层
主要是将数据存储在运行于裸设备的文件系统之上,并完成与存储引擎的交互。
mysql逻辑架构图:
2、SQL的执行顺序
手写顺序:
真正执行顺序:
- 随着 Mysql 版本的更新换代,其优化器也在不断的升级,优化器会分析不同执行顺序产生的性能消耗不同而动 态调整执行顺序。下面是经常出现的查询顺序:
3、常见JOIN查询
1.select <select_list> from tableA a inner join tableA b on a.key=b.key;
2.select <select_list> from tableA a left join tableB b on a.key=b.key;
3.select <select_list> from tableA a right join tableB b on a.key=b.key;
4.select <select_list> from tableA a left join tableB b on a.key=b.key where b.key is null;
5.select <select_list> from tableA a right join tableB b on a.key=b.key where a.key is null;
6.select <select_list> from tableA a left join tableB b on a.key=b.key
union #将两个查询结果合并会删除重复的数据
select <select_list> from tableA a right join tableB b on a.key=b.key;
7.select <select_list> from tableA a left join tableB b on a.key=b.key where b.key is null
union
select <select_list> from tableA a right join tableB b on a.key=b.key where a.key is null