连接层
一、处理层
这一层主要功能有:SQL 语句的解析、优化,缓存的查询,MySQL 内置函数的实现,跨存储 引擎功能(所谓跨存储引擎就是说每个引擎都需提供的功能(引擎需对外提供接口)),例如: 存储过程、触发器、视图等。
1.如果是查询语句(select 语句),首先会查询缓存是否已有相应结果,有则返回结果,无则 进行下一步(如果不是查询语句,同样调到下一步)
2.解析查询,创建一个内部数据结构(解析树),这个解析树主要用来 SQL 语句的语义与语 法解析;
3.优化:优化 SQL 语句,例如重写查询,决定表的读取顺序,以及选择需要的索引等。
1、缓存
在生产环境建议不开启,除非经常有 sql 完全一模一样的查询
2、mysql解析查询
sql解析时按如下图顺序解析
子查询和inner join 等价
3、优化
ql 解析器会通过优化器来优化程序员写的 sql
三、mysql存储引擎
最重要的一个存储引擎 —innodb(默认存储引擎)
myisam已经不用了
mysql逻辑架构:
实例就是一个线程
mysql schema就是database
物理存储:innodb存储引擎:
frm:表结构文件
ibd文件: 数据和索引文件存放在一起
myisam存储引擎-----> 非聚集索引:
frm:表结构文件
MYD:data
MYI: index
数据和索引分开放叫堆表
数据和索引放一起叫索引组织表
1、myisam
MySql 5.5之前默认的存储引擎
MyISAM 存储引擎由MYD和MYI组成
myisam可以压缩,但压缩后不能插入
适用场景:
- 非事务型应用(数据仓库,报表,日志数据)
- 只读类应用
- 空间类应用(空间函数,坐标)
2、innodb
特性
- Innodb 是一种事务性存储引擎
- 完全支持事务得 ACID 特性
- Redo Log 和 Undo Log
- Innodb 支持行级锁(并发程度更高)
适用场景
- Innodb适用于大多数OLTP应用