MySQL进阶(存储引擎)
MySQL体系结构
连接层
服务层
引擎层(index(索引)是在存储引擎存在的,不同的存储引擎索引的结构是不一样的)
存储层
存储引擎
存储引擎是存储数据、简历索引、更新/查询数据等实现方式,存储引擎是基于表的,不是基于库的(也就是说在一个库下的多张表它是可以选择不同的存储引擎),存储引擎也可被称为表类型
show engines 查看当前数据库支持的存储擎
InnoDB
InnoDB是一种兼顾高可靠性和高性能的通用储存引擎,在MySQL5.5后,InnoDB是MySQL默认的存储引擎
特点
DML操作支持ACID(原子性,隔离性,一致性,持久性),支持事物
行级锁,支持高并发访问特性
支持外键 FOREIGN KEY约束,保持事物的完整性和正确性
文件
xxx.ibd:xxx代表的是表名,innoDB引擎的每张表都会对应这样的一个表空间文件,存储该表的表结构,数据和索引。 参数:innodb_file_per_table(觉得多张表公用一个表空间文件还是每张表用一个表空间文件)
逻辑存储结构
TableSpace 表空间
Segment 段
Extent 区
Page 页
Row 行
MyISAM
MyISAM是mysql早起默认的存储引擎
特点
不支持事务,不支持外键
支持表锁,不支持行锁
访问速度快
文件
xxx.sdi:存储表结构信息
xxx.MYD:存储数据
xxx.MYI:存储索引
Memory
介绍
Memory引擎存储的表是存储在内存中的,由于受硬件或断电的影响,只能将这些表作为临时表或缓存使用
特点
内存存放
hash索引
xxx.sdi:存储表结构息
InnoDB和MyISAM的区别
InnoDB是支持事物,行锁,外键的
MyISAM是不支持事物,行锁,外键,支持表锁
存储引擎的选择
InnoDB:是MySQL默认的存储引擎,支持事物、外键 ,如果应用对事物的完整性比较高,在并发下要求事物的一致性,数据操作除了插入和查询之外,还包含很多更新和删除操作,那么选择InnoDB存储引擎是合适的
MyISAM:如果应用以读操作和插入操作为主,并且对事物的完整性,并发性要求不是很高,那么选择MyISAM是合适的
MEMORY:将所有的数据保存在内存中,访问速度快,通常用于临时表和缓存,缺陷是对表的大小有限制,太大的表无法缓存到内存中,无法保证数据的安全性