MySQL体系架构
架构图
组件组成
- Connection Pool : 连接池组件,缓存连接使连接可复用
- Management Services & Utilities : 管理服务和工具组件,一般用于管理集群
- SQL Interface : SQL接口组件,接收SQL语句返回查询结果
- Parser : 查询分析器组件,验证语法并解析成解析树
- Optimizer : 优化器组件,用于优化SQL
- Caches & Buffers : 缓冲池组件
- Pluggable Storage Engines : 插件式存储引擎
- File System : 文件系统
分层结构
- 连接层:缓存连接线程且每个连接一个线程,并进行身份和权限认证
- 服务层:解析SQL语句,缓存,优化SQL,执行SQL
- 引擎层:存储引擎真正的负责了MySQL中数据的存储和提取,服务器通过API和存储引擎进行通信。不同的存储引擎具有不同的功能,这样我们可以根据自己的需要,来选取合适的存储引擎。
- 存储层:实际存储文件
MySQL5.1后废除缓存且不能通过命令修改,只能通过配置文件修改
show variables like '%max_connection%';--查看MySQL最大线程连接数量
show variables like '%query_cache%';--查看关于缓存的信息
存储引擎
MySQL最大的特点是使用可插拔的存储引擎,存储引擎是对于表来说的,每个表可以使用不同的存储引擎,大概有以下几种:
- InnoDB:满足事务,提供行锁,MySQL因InnoDB而被广泛运用
- MyISAM:不支持事务,不支持行锁,无法安全恢复表,用于只读表,常用于地图搜索。
- Archive:只支持insert和select,全表扫描
- Memory:缓存,用于只读表,不支持text存储
- Blackhole:不存储数据,只记录表日志
- CSV:可用于在外部文件取数据和导出数据
- Ferderated:访问其他MySQL代理
- NDB集群:类似于MySQL集群
- 其他第三方引擎:Percona的XtraDB引擎、TokuDB引擎(使用分形树使用缓存将随机写转换为顺序写,写效率极高);
alert table 表名 set ENGTEN = InnoDB; --转换表引擎
show engines;--查看安装的存储引擎
show variables like '%storage_engine%';--查看默认存储引擎
InnoDB和MyISAM对比
对比 | InnoDB | MyISAM |
---|---|---|
主外键 | √ | × |
事务支持 | √ | × |
缓存 | 只缓存索引 | 缓存其他数据 |
行表锁 | 支持行锁 | 不支持行锁 |
表空间 | 小 | 大 |
关注点 | 性能 | 事务 |