MySQL系列(一)mysql架构设计及存储引擎

mysql架构设计

1.连接层

最上层是一些客户端和连接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似于tcp/ip的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。

2.服务层

第二层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化及部分内置函数的执行。所有跨存储引擎的功能也在这一层实现,如过程、函数等。在该层,服务器会解析查询并创建相应的内部解析树,并对其完成相应的优化如确定查询表的顺序,是否利用索引等,最后生成相应的执行操作。如果是select语句,服务器还会查询内部的缓存。如果缓存空间足够大,这样在解决大量读操作的环境中能够很好的提升系统的性能。

3.引擎层

存储引擎层,存储引擎真正的负责了MySQL中数据的存储和提取,服务器通过API与存储引擎进行通信。不同的存储引擎具有的功能不同,这样我们可以很据自己的实际需要进行选取,后面介绍MyISAM和InnoDB

4.存储层

数据存储层,主要是将数据存储在运行于裸设备的文件系统之上,并完成与存储引擎的交互

SQL的执行和加载过程
MySQL系列(一)mysql架构设计及存储引擎_第1张图片
1.客户端发送一条查询给服务器;
2.服务器通过权限检查之后,会先检查查询缓存,如果命中了缓存,则立即返回存储在缓存中的结果。否则进入下一阶段;
3.服务器端进行SQL解析、预处理,再有优化器根据该SQL所涉及到的数据表的统计信息进行计算,生成对应的执行计划;
4.MySQL根据优化器生成的执行计划,调用存储引擎的API来执行查询;
5.将结果返回给客户端。


mysql常用存储引擎

Mysql支持很多类型的存储引擎,如MyISAM、InnoDB、Memory、Archive、Example等,主要介绍两种MyISAM和InnoDB。这里我们要注意数据的存储引擎是可以设置到表层面的,也就是同一个库不同的表是允许不用的存储引擎的。

InnoDB存储引擎

InnoDB存储引擎从MySQL5.5版本开始是默认的存储引擎(之前的版本InnoDB存储引擎仅在Windows下是默认的存储引擎),该存储引擎是第一个完整支持ACID事务的MySQL存储引擎,其特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读、同时被设计用来最有效的利用以及使用内存和CPU。

MyIsam存储引擎

MyIsam 是mysql5.5之前默认的存储引擎,缺点是 不支持事务,不支 持外键,优点:批量插入和查询数据快,不支持事务安全或者主要以查询,插入为主的业务表的创建,可以定义为myisam存储引擎。
myisam表支持三种不同的存储格式:静态表(长度固定)、动态表、压缩表
静态表(默认): 静态表中的字段都是非变长字段,这样每个记录都是固定长度的,这种存储方式的优点是存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用空间通常比动态表多。
动态表: 动态表中包含变长字段,记录长度不是固定的,存储有点是占用空间较少,但是频繁更新和删除记录会产生碎片,需要定期执行optimize table 语句或 myisamchk-r命令来改善性能,在出现故障时恢复相对比较困难。
**压缩表:**由 myisampack工具创建,占据非常小的磁盘空间。因为每个记录是呗单独压缩的,所以只有非常小的访问开支。

Innodb存储引擎和MyIsam存储引擎对比

对比项 MyIsam InnoDB
外键 不支持 支持
事务 不支持 支持
行表锁 表锁,即使操作(写数据)一条记录也会锁住整张表,不适合高并发的操作 行锁,操作时(写数据)只锁某一行,不对其他行有影响
缓存 只缓存索引,不缓存真实数据 即缓存索引又缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响
表空间
关注点 性能 事务
5.6版之前FULLTEXT类型的索引 支持 不支持

这里我们要注意,Innodb存储引擎的行锁的前提是通过索引检索,若不通过索引检索也会是表锁。(索引我们会在后面做具体介绍)

修改mysql存储引擎

alter table tablename type = 存储引擎;

查看某个库下指定表使用的存储引擎

show table status from 库名 where name=‘表名’;

你可能感兴趣的:(MySQL系列,mysql,数据库)