MySQL 数据库基本结构
如图,MySQL 是一个 C/S 架构的数据库服务器。具有三层结构:连接层、服务层、存储引擎层。
连接层
- 提供 TCP 连接
- 进行用户安全验证
服务层
- 解析器,解析用户输入的 SQL,解析成多种执行计划
- 优化器,优化 SQL 语句和执行计划,选择一个最优的执行计划(考虑 CPU、IO、Memory)
-
执行器,按照优化器的选择执行 SQL 语句,获取结果数据
- QueryCache 机制 如果客户端发来的多次 query 请求完全相同(精确到字母大小写),并且相关数据没有发生变化,那么 MySQL 会直接将缓存结果返回,不进行解析、优化、执行过程。
存储引擎层(常用 InnoDB/MyISAM)
- 按照 SQL 的需要,把数据以特定的数据结构存储于文件中
- 提供锁、事务、缓存机制
InnoDB 和 MyISAM 引擎的差别
MyISAM 是 MySQL 自带的存储引擎,但是它对高并发支持的不好。而第三方的 InnoDB 引擎,提供了较好的并发性。随着互联网对高并发需求的不断增加,MySQL 结合 InnoDB 迎来了快速发展。(5.1 之前默认是 MyIsam,之后默认是 InnoDB)
特点 | InnoDB | MyISAM |
---|---|---|
主要应用方向 | 面向 OLTP(Online Transaction Process,在线事物处理) | 面向 OLAP(Online Analytical Process,在线分析处理) |
对事务的支持 | 支持事务 | 不支持事务 |
对锁的支持 | 表锁、行锁 | 表锁 |
对外键的支持 | 支持外键 | 不支持 |
对高并发的支持 | 支持高并发 | 不支持,并发下性能急剧下降 |
对全文索引的支持 | 不支持 | 支持全文索引 |
对全表总数的统计 | 需要实时计算 | 可直接查询总数记录 |
存储空间大小 | 相比 MyISAM 存储空间较大,没有压缩、缓存、索引要占据容量 | MyISAM 支持数据压缩,容量较小 |
单个表容量限制 | 单个表容量受操作系统限制,一般 2GB | 无容量限制 |
从上面的对比可以看出,InnoDB 在锁、事务方面都对高并发有较好的支持,我们通常默认使用 InnoDB。后面文章中默认以 InnoDB 为引擎。
DML/DDL
Mysql 是 C/S 模式,所以 client 端输入的 SQL 需要执行 commit 统一提交到 server 端处理再返回结果。Mysql client 端默认是自动带 commit 的。
- DML(Data Manipulation Language) 就是我们通常的增删改查语句,后面需要 commit。
- DDL(Data Definition Language) 是用来管理数据库的语句,自动 commit,不能回滚。