MYSQL逻辑架构
1、连接层
最上层是一些客户端和连接服务,包括本地sock通信和大多数基于客户端/服务端工具实现的类似于tcp/ip的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。
2、服务层
第二层架构主要是完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析以及优化及部分内置函数的执行。所有跨存储引擎的功能也在这一层实现,如过程、函数等。在该层,服务器会解析查询并创建相应的内部解析树,并对其完成相应的优化如确定查询表的顺序,是否利用索引等,最后生成相应的执行操作。
如果是select语句,服务器还会查询内部的缓存。如果缓存足够大,这样在解决大量读取操作额环境中就能够很好的提升系统的性能。
3、引擎层
存储引擎层,存储引擎层真正负责了MySQL中数据的存储和提取,服务器通过API与存储引擎进行通信。不同的存储引擎具有的功能不同,这样我们可以根据自己的实际需要进行选取。
4、存储层
数据存储层,主要将数据存储在运行于裸设备的文件系统之上,并完成与存储引擎的交互
存储引擎简介
存储引擎室指表的类型以及在计算机上的存储方式
下面介绍几种MySQL最常见的几种存储引擎
1、InnoDB(mysql5.5之后的默认存储引擎)
- 它遵循ACID原则设计,提供了具有提交、回滚和崩溃恢复的事务功能;
- 具有主外键;
- 支持行锁,操作时只锁某一行,不对其他行有影响,适合高并发操作;
- 不仅缓存索引还缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响;
优势:在于提供了良好的事务处理,崩溃修复能力和并发控制,增删性能好
劣势:占用空间比较大
使用场景:银行(对事物的完整性要求很高)、售票(要求实现并发控制)
2、MyLSAM(mysql5.5之前的默认存储引擎)
- 基于LSAM存储引擎,并对其进行扩展;
- 不支持主外键,不支持事务;
- 只支持表锁,即使操作一条记录也锁住整张表,不适合高并发的操作;
- 只缓存索引,不缓存真实数据;
- 基于MyLSAM的存储引擎的表支持三种不同的存储格式:静态型、动态型、压缩型
优势:占有空间小,处理速度快,查询性能好
劣势:不支持事务操作,不适合并发操作
我们常用的两个存储引擎就是InnoDB和MyLSAM,我们可以进行比较:
MyLSAM | InnoDB | |
主外键 | 不支持 | 支持 |
事务 | 不支持 | 支持 |
行标锁 | 只支持表锁 | 支持行锁 |
缓存 | 只缓存索引,不缓存真实数据 | 不仅缓存索引还缓存真实数据 |
性能 | 查询性能好 | 增删性能好 |
表空间 | 小 | 大 |
关注点 | 性能 | 事务 |
3、MEMORY
mysql中一类特殊的存储引擎,它使用存储在内存中的内容来创建表,而且数据全放在内存中
优势:数据存储在内存中有利于快速处理,提高表的效率
劣势:不安全,把数据存储在内存中,关机或重启数据都会消失,断电即失
4、Archive
- 用于数据归档,压缩比非常高;
- 存储空间大概是InnoDB的10-15分之一;
用于存储历史数据非常合适,比如记录日志信息
5、MERGE
也称MRG.MyLSAM,是一组MyLSAM表的组合,这些MyLSAM表结构必须完全相同.
SQL执行顺序
手写
机读