MySQL重点内容-存储引擎
1、MySQL体系结构
MySQL体系结构如上图,分为四层:
1、连接层
:最上层是一些客户端和链接服务,主要完成一些类似于连接处理、授权认证、及相关的安全方案。服务器也会为安全接入的每个客户端验证它所具有的操作权限。
2、服务层
:第二层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化,部分内置函数的执行。所有跨存储引擎的功能也在这一层实现,如过程、函数等。
3、引擎层
:存储引擎真正的负责了MySQL中数据的存储和提取,服务器通过API和存储引擎进行通信。索引index是在存储引擎层实现的。不同的存储引擎,索引结构是不一样的。InnoDB引擎是MySQL5.5之后默认的引擎。
4、存储层
:主要用来存储数据库的相关数据,包含一系列的日志。
2、存储引擎简介
存储引擎是基于表的
,而不是基于库的,所以存储引擎也可被称为表类型。
# 1、在创建表时,指定存储引擎
CREATE TABLE 表名{
字段1 字段1类型 [COMMENT 字段1注释],
字段2 字段2类型 [COMMENT 字段2注释]
}ENGINE = INNODB [COMMENT 表注释]
# 2、查看当前数据库支持的鵆引擎
SHOW ENGINES;
3、存储引擎特点
InnoDB
InnoDB是一种兼顾高 可靠性 和 高性能 的通用存储引擎,在MySQL5.5 之后,InnoDB是默认的MySQL存储引擎。
特点(事务、外键、行级锁):
- DML(增删改语句)操作遵循ACID模型,支持
事务
行级锁
,提高并发访问性能- 支持
外键
FOREIGN KEY约束,保证数据的完整性和正确性
文件
InnoDB存储引擎中,每一个InnoDB引擎的表都会对应一个表空间文件xxx.ibd
文件,xxx是表名。这个表空间文件存放了表结构
(frm表结构文件、sdi数据字典)、数据
和索引
。
参数 innodb_file_per_table控制一张表对应一个表空间文件,还是多张表对应一张表空间文件。
查看系统变量:show variables like ‘’
InnoDB逻辑存储结构
一个表空间(tablespace)包含若干段,一个段(segment)包含若干区(extent),一个区包含若干页(page),一个页包含若干行(row)。
InnoDB逻辑结构中,page是磁盘的最小操作单元
,一个extent大小是固定的是1M,一个page大小是固定的16K,一个extent中最多包含64个page
MyISAM存储引擎
MyISAM是MySQL早期的默认存储引擎
。
特点
-
不支持事务,不支持外键
-
支持表锁,不支持行锁
-
访问速度块
MyISAM在磁盘中涉及的文件有3个:xxx.MYD,xxx.MYI和xxx.sdi。
xxx.sdi
:存储结构(表结构的信息)xxx.MYD
:存储数据xxx.MYI
:存储索引
Memory存储引擎
Memory引擎的表数据是存储在内存
中的,由于受到硬件限制、或断电问题的影响,只能将这些表作为临时表或缓存
使用。
特点
- 内存存放,访问速度快
- 支持hash索引(默认)
文件
xxx.sdi
:存储表结构信息
存储引擎对比
比较重要的是InnoDB与MyISAM的三个不同点
:
1、InnoDB支持事务
,而MyISAM不支持事务
2、InnoDB支持行级锁
,MyISAM仅支持表级锁
3、InnoDB支持外键
,MyISAM不支持外键
4、存储引擎选择
存储引擎没有好坏之分,在合适的业务场景选择合适的存储引擎。
InnoDB
:是Mysql的默认存储引擎,支持事务、外键。如果对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询外,还包含更多的更新、删除等操作,那么InnoDB存储引擎是比较合适的选择。MyISAM
:如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事物的完整性、并发性要求不是很高,那么选择MyISAM存储引擎。(经常被NoSQL的Mongodb替代)MEMORY
:将所有数据保存在内存中,访问速度快。通常用于临时表及缓存。MEMORY的缺陷就是对表的大小有限制,太大的表无法缓存在内存中,而且无法保障数据的安全性。(经常被NoSQL的Redis替代)
总结
1、体系结构
连接层、服务层、引擎层、存储层
2、存储引擎简介
SHOW ENGINES;
CREATE TABLE xxx ENGINE=INNODB;
3、存储引擎特点
INNODB与MyISAM:事务、外键、行级锁
4、存储引擎的应用
InnoDB:存储业务系统中对于事务、数据完整性要求极高的核心数据
MyISAM:存储业务系统的非核心数据(评论等,偶尔丢一两条也没关系)