MySQL存储引擎
一、MySQL数据库体系结构:
1.连接层:连接池
2.服务层:SQL接口,解析器,查询优化器,缓存
3.引擎层:可插拔式存储引擎
4.存储层:系统文件,日志
二、存储引擎概念
存储引擎就是存储数据,建立索引,更新/查询数据等技术的实现方式。存储引擎是基于表的,不是基于库的,所以存储引擎也可以称为表类型。
查看表引擎语法:select create table 表名 --- 默认引擎:InnoDB1.在创建表时,指定存储引擎
create table 表名(
字段1 类型1,
......
)engine=innodb [表注释]2.查看当前数据库支持的存储引擎
语法:show engines;
三、存储引擎特点
1. InnoDB
InnoDB介绍:InnoDB是一种兼顾高可靠性和高性能的通用存储引擎,在MySQL5.5之后,InnoDB是默认MySQL存储引擎
特点:DML操作遵循ACID模型(事务的四大特性),支持事务;
行级锁,提高并发访问性能;支持外键foreign key约束,保证数据的完整性和正确性;
文件:xxx.ibd:xxx代表的是表名,innoDB引擎的每张表都会对应一个表空间文件,存储该表的表结构(frm,sdi)、数据和索引
参数:innodb_file_per_table
InnoDB逻辑存储结构:表空间,段,区(1M),页(16K),行
2. MyISAM
MyISAM介绍:MyISAM是MySQL早期默认存储引擎
特点:不支持事务,不支持外键,支持表锁,不支持行锁,访问速度快
文件:
.sdi:存储表结构信息、.MYD:存储数据、.MYI:存储索引
3. Memory
Memory介绍:Memory引擎的表数据是存储在内存中的,由于受到硬件问题或断电问题的影响,只能将这些表作为临时表或缓存使用
特点:内存存放hash索引(默认)
文件:.sdi:存储表结构信息
4. InnoDB、MyISAM、Memory的区别
InnoDB | MyISAM | Memory | |
---|---|---|---|
存储限制 | 64TB | 有 | 有 |
事务安全 | 支持 | 不支持 | 不支持 |
锁机制 | 行锁 | 表锁 | 表锁 |
B+tree索引 | 支持 | 支持 | 支持 |
Hash索引 | 不支持 | 不支持 | 支持 |
全文索引 | 支持 | 支持 | 不支持 |
空间使用 | 高 | 低 | N/A |
内存使用 | 高 | 低 | 中等 |
批量插入速度 | 低 | 高 | 高 |
支持外健 | 支持 | 不支持 | 不支持 |
注:InnoDB、MyISAM、Memory的区别:事务,锁机制,外键
四、存储引擎的选择
在选择存储引擎时,应该根据应用系统的特点选择合适的存储引擎。对于复杂的应用系统,还可以根据实际情况选择多种存储引擎进行组合。
1.InnoDB:是MySQL的默认存储引擎,支持事务、外键。如果应用对事务的完整性有比较高的需求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新、删除操作,可以选择InnoDB存储引擎。
2.MyISAM:应用是以读操作和插入操作为主,只有很少的跟新和删除操作,并且对事务的完整性、并发性要求不是很高,可以选择MyISAM存储引擎--存储一些非核心事务。
3.Memory:将所有数据保存在内存中,访问速度快,通常用于临时表及缓存。Memory的缺陷是对表的大小有限制,太大的表无法缓存在内存中,而且无法保障数据的安全性--redis。