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:将所有的数据保存在内存中,访问速度快,通常用于临时表和缓存,缺陷是对表的大小有限制,太大的表无法缓存到内存中,无法保证数据的安全性

经验分享 程序员 微信小程序 职场和发展