目录
16.1、MySQL的逻辑架构
16.2 存储引擎概述
16.3 MySQL默认存储引擎
16.4、查看存储引擎
4.1 查看已经创建的表格的存储引擎:
4.2 查看当前数据库支持的存储引擎:
编辑4.3 查看默认存储引擎和当前选择的存储引擎:
16.5 创建表并指定存储引擎
16.6 三种存储引擎介绍
16.6.1 InnoDB
16.6.2 MyISAM
16.6.3 Memory
16.7 (面试题)InnoDB与MyISAM区别
16.8 存储引擎选择
16.1 MySQL的逻辑架构
MySQL最重要、最与众不同的特性是它的存储引擎架构,这种架构的设计将查询处理(Query Processing)及其他系统任务(Server Task)和数据的存储/提取相分离。这种处理和存储分离的设计可以在使用时根据性能、特性,以及其他需求来选择数据存储的方式。
MySQL中同一个数据库,不同的表格可以选择不同的存储引擎。
MyISAM不支持事务、也不支持外键,其优势是访问的速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用。每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存储表定义。数据文件的扩展名为.MYD (MYData)。索引文件的扩展名是.MYI (MYIndex)。
InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比MyISAM的存储引擎,InnoDB写的处理效率差一些,并且会占用更多的磁盘空间以保存数据和索引。InnoDB:所有的表都保存在同一个数据文件中,InnoDB表的大小只受限于操作系统文件的大小限制。Myisam只缓存索引,不缓存真实数据;Innodb不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响。
MEMORY存储引擎使用存在于内存中的内容来创建表。MEMORY类型的表访问非常的快,因为它的数据是放在内存中的,并且默认使用HASH索引,但是一旦服务关闭,表中的数据就会丢失。主要用于那些内容变化不频繁的代码表或者作为统计操作的中间结果表。
16.2 存储引擎概述
存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。
16.3 MySQL默认存储引擎
创建新表时如果不指定存储引擎,那么系统就会使用默认存储引擎,MySQL5.5之前的默认存储引擎是MyISAM,5.5之后改为了InnoDB。
16.4查看存储引擎
4.1 查看已经创建的表格的存储引擎:
//格式SHOW CREATE TABLE 表名称;//举例SHOW CREATE TABLE account;
结果
4.2 查看当前数据库支持的存储引擎:
SHOW ENGINES;
4.3 查看默认存储引擎和当前选择的存储引擎:
SHOW VARIABLES LIKE '%storage_engine%';
16.5 创建表并指定存储引擎
create table my_myisam(id int,name varchar(10))engine =MYISAM;show create table my_myisam;
结果:
16.6 三种存储引擎介绍
16.6.1 InnoDB
1. 介绍
InnoDB是一种兼顾高可靠性和高性能的通用存储引擎,在mysql5.5之后,InnoDB是默认的Mysql存储引擎。
2. 特点
DML操作遵循ACID模型,支持事务
行级锁,提高并发访问性能
支持外键FOREIGN KEY约束,保证数据的完整性和正确性。
3. 文件
xxx.ibd:xxx代表的是表名,innoDB引擎的每张表都会对应这样一个表空间文件,存储该表的表结构(frm、sdi)、数据和索引。
参数:innodb_file_per_table
show variables like 'innodb_file_per_table'
4. 特点
16.6.2 MyISAM
1. 介绍
MyISAM是MySQL早期的默认存储引擎。
2. 特点
不支持事务,不支持外键
支持表锁,不支持行锁
访问速度快
16.6.3 Memory
1. 介绍
Memory引擎的表数据是存储在内存中的,由于受到硬件问题、或断电问题的影响,只能将这些表作为临时表或缓存使用。
2. 特点
内存存放
hash索引(默认)
3. 文件
xxx.sdi:存储表结构信息
16.7 (面试题)InnoDB与MyISAM区别
InnoDB支持事务、行级锁和外键。MyISAM不支持
16.8 存储引擎选择
在选择存储引擎时,应该根据应用系统的特点选择合适的存储引擎。对于复杂的应用系统,还可以根据实际情况选择多种存储引擎进行组合。
InnoDB: 是MySQL的默认存储引擎,支持事务、外键。如果应用对于事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新、删除操作,那么InnoDB存储引擎是比较合适的选择。
MyISAM:如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那么选择这个存储引擎是非常合适的。
Memory:将所有数据保存在内存中,访问速度快,通常用于临时表和缓存。MEMORY的缺陷就是对表的大小有限制,太大的表无法缓存在内存中,而且无法保障数据的安全性。