1) 执行一条sql语句的过程
1. 连接层
(1) 提供连接协议
Socket
TCPIP
(2) 验证用户名(root@localhost)密码合法性,进行匹配专门的授权表。
(3) 派生一个专用连接线程(接收SQL,返回结果)
mysql> show processlist;
2. SQL层
(1)验证SQL语法和SQL_MODE
(2)验证语义
(3)验证权限
(4)解析器进行语句解析,生成执行计划(解析树)
(5)优化器(各种算法,基于执行代价),根据算法,找到代价最低的执行计划。
(6)执行器按照优化器选择执行计划,执行SQL语句,得出获取数据的方法。
(7)提供query cache(默认不开),一般不开,会用redis
(8)记录操作日志(binlog),默认没开
3. 存储引擎层
真正和磁盘打交道的一个层次
根据SQL层提供的取数据的方法,拿到数据,返回给SQL,结构化成表,再又连接层线程返回给用户。
2) mysql的存储结构(逻辑结构和物理结构)
1. MySQL逻辑存储结构
库 ---> Linux目录
create database zabbix charset utf8mb4; ---> mkdir /wordpress
show databases; ---> ls /
use zabbix; ---> cd /wordpress
表 ---> Linux的文件
列(字段) 无
列属性 无
数据行(记录) ---> Linux数据行
表属性(元数据) ---> Linux 文件属性
2. MySQL物理存储结构
2.1
库: 使用文件系统上的目录来表示
表:
MyISAM
user.frm : 存储的表结构(列,列属性)
user.MYD : 存储的数据记录
user.MYI : 存储索引
InnoDB
gy.frm : 存储的表结构(列,列属性)
gy.ibd : 存储的数据记录和索引
ibdata1 : 数据字典信息
2.2 innodb 段 区 页
一般情况下(非分区表)
一个表就是一个段
一个段由多个区构成
一个区在(16k),64个连续的页,1M大小
网友评论