这是进阶内容的第一篇,我们来看看MySQL的存储引擎,之前我们在创建数据表的时候所使用的存储引擎为InnoDB,这是MySQL的默认引擎,但实际上MySQL中的存储引擎有很多,它们之间的特点和使用场景也不同,这篇算是存储引擎的入门,我们先了解下大致的框架,具体细节等到后面的文章
1.MySQL体系结构
这里概括下每个层的功能即可,因为重点是介绍存储引擎
- 连接层:负责和客户端进行链接
- 服务层:这里会完成大多数的核心功能,比如前面文章的查询语句,执行内置的函数等
- 引擎层:引擎层中的存储引擎负责数据的存储和提取
- 存储层:数据存储的位置
2.存储引擎
2.1 简介
存储引擎是存储数据、建立索引、更新/查询数据等技术的实现方式。因为存储引擎是基于表的,所以存储引擎也可被称为表类型
在创建数据表的时候我们可以指定引擎,指定引擎的关键字为engine
create table 表名(字段1 数据类型,字段2 数据类型......) engine=引擎;
如果说你想知道自己的MySQL支持哪些引擎的话,可以输入下面的语句
show engines;
图中的只是截取了一部分,这里还是介绍下每个字段所代表的意思
从左到右依次是引擎名称,是否支持,注释,是否支持事务,是否支持XA协议和是否支持保存点
2.2 InnoDB引擎
在MySQL5.5之后,InnoDB引擎就是MySQL的默认存储引擎,这是因为InnoDB引擎的性能和可靠性高
InnoDB引擎特点
- 支持事务,DML语句遵循事务的特性
- 支持外键约束
- 行级锁
最后一条和MySQL的锁有关,后面的文章会介绍到
总结下来InnoDB引擎的特点就是事务,外键,行级锁
InnoDB所涉及到的磁盘文件的后缀为.ibd,InnoDB每张表都会对应一个.ibd文件,文件里面所存储的是表结构,数据和索引
InnoDB的逻辑存储结构由大到小依次为: 表空间(TableSpece),段(Segmebt),区(Extent),页(Page),行(Row)
表空间就是,ibd文件,一个表空间里面包含了多个段,一个段里面有多个区,一个区里面有多个页,一个页里面有多个行
2.3 MyISAM引擎
MyISAM是MySQL早期的默认的存储引擎
MyISAM引擎特点:
- 不支持事务和外键
- 不支持行锁,支持表锁
- 访问速度快
MyISAM涉及到的磁盘文件有三种,后缀分别为.MYD .MYI和.sdi
其中.sdi存放的是表结构的信息,.MYD存放的是数据,.MYI存放的是索引
2.4 Memory引擎
Memory引擎比较特殊,它是将数据存储在内存当中,所以Memory引擎的表只能作为临时表或者是缓存使用
Memory引擎特点:
- 内存存放数据
- hash索引
- 支持表锁
Memory引擎涉及的磁盘文件为.sdi文件,用来存储表结构信息
本篇到此结束,下一篇是MySQL的索引,完