mysql分层、存储引擎、解析原理
一、mysql分层
一般来说,MySQL逻辑可分为四个层次,分别为:连接层,服务层,引擎层,存储层 。
- 连接层
提供与客户端连接的服务,当客户端发出一个请求后(如增删改查的SQL语句),首先到达该层,将服务器与客户端建立连接。
- 服务层
服务层分两个作用:
(1)提供各种用户使用的接口。 如select、insert等;
(2)提供SQL优化器(MySQL Query Optimizer)。 SQL优化器是MySQL服务层自带的一个服务,它会自动优化用户写得不是最优的SQL,使其达到优化的效果。但由于优化器毕竟只是优化器,有时候会将用户自定义的优化方案给更改掉,从而使用户自己的优化方案失效,这一点需要注意。
- 引擎层
引擎层提供各种数据存储的方式。MySQL的存储引擎有很多,比较常用的比如有InnoDB、MyISAM;
InnoDB与MyISAM的区别为:
InnoDB 事务优先,所以适合高并发操作,使用的是行锁;
MyISAM 性能优先,适合查询多的场景,使用的是表锁;
- 存储层
最终的数据存储在存储层。
二、存储引擎
InnoDB:事物优先(可防止高并发产生的一些错误,所以适合高并发,用的行锁)
MyISAM:性能优先(用的表锁)
查询数据库支持哪些引擎:show engines:
查看当前使用的引擎:show variables like '%storage_engine%';
指定数据库对象的引擎:
create table DB( id int(4) auto_increment, name varcher(5), dept varchar(5), primary key(id) )ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
注:指定引擎,指定id每次自增步长,指定字符编码utf8
三、SQL解析原理
编写过程:select distinct ... from ... join ... on ... where ... group by ...having ... order by ...
解析过程:from ... on ... join ... where ... group by ... having ... select distinct ... order by ...