第一部分:Mysql架构
Mysql的逻辑结构
组件:客户端、核心服务、存储引擎
Mysql查询的5个过程过程:
- 客户端向MySQL服务器发送一条查询请求
- 服务器首先检查查询缓存,如果命中缓存,则立刻返回存储在缓存中的结果。否则进入下一阶段
- 服务器进行SQL解析、预处理、再由优化器生成对应的执行计划
- MySQL根据执行计划,调用存储引擎的API来执行查询
- 将结果返回给客户端,同时缓存查询结果
Mysql的初始化是通过加载 /etc/my.cnf文件完成初始化加载。
Mysql存储引擎
常见的有InnoDB、MyISAM、MEMMORY、Archive
InnoDB:唯一支持外键,支持事务,用于大规模活跃数据查询 (行锁)
MyISAM:不支持外键、主键和事务,支持数据压缩,强调数据快速读取,用于冷数据查询。(表锁) (linux默认引擎)
memory:默认使用HASH索引,数据存储在内存中,读取速度快。(表锁)
MERGE:是一组MyISAM引擎的组合,用来进行多表的进行查询和更新操作。(表锁)
补充:
InnoDB和MyISAM都是使用B+Tree(平衡二叉树+有序数组链表)进行索引。
memery使用Hash进行索引
B+树索引 和哈希索引的比较
-
如果是等值查询,哈希索引有绝对优势
-
范围查询检索,哈希索引性能比较差
-
哈希索引不支持排序,和模糊查询
-
存在大量重复键,由于存在哈希碰撞问题,哈希索引的性能比较低
MySql的物理模块
- 日志文件
- 数据文件 通常存储在mysql/data 目录
- 其他文件:如mysql.sock 这个文件是用来服务器与客户端进行套接字连接的文件