存储引擎
MySQL的体系结构
0、客户端连机器【java、Python、JDBC等】
1、【MySQL服务器-连接层】认证,授权,连接池
2、【MySQL服务器-服务层】 {SQL接口(DML、DDL、存储过程、触发器)、解析器、查询优化器、缓存}
3、【MySQL服务器-存储引擎层】{InnoDB、MyISAM、NDB、Archive。。。。可插拔式}
控制的是MySQL当中数据存储和提取的方式,服务器会通过存储引擎和API进行通信和交互。
【索引是在存储引擎层实现的,也就意味着不同的存储引擎,索引的结构是不一样的】
InnoDB是MySQL5.5版本之后默认的存储引擎。
4、【MySQL服务器-存储层】持久化到磁盘当中的文件和日志。
存储引擎简介
引擎没有好坏之分,不同的场景使用不同的引擎。
存储引擎是MySQL当中特有的,就是存储数据,建立索引,更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可以被称为表类型。
show create table user;
CREATE TABLE `user` (
`user_id` int(11) NOT NULL,
`username` varchar(60) DEFAULT NULL,
`user_status` char(1) DEFAULT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
show engines;
ENGINE=InnoDB DEFAULT CHARSET=utf8 指定存储引擎。
存储引擎特点
1、InnoDB
是一种兼顾高可靠性和高性能的通用存储引擎,在MySQL5.5之后,InnoDB是默认的MySQL存储引擎。
特点:
1、DML操作遵循ACID模型,支持事务。
2、行级锁,提高并发访问性能。
3、支持外键 Foreign key约束,保证数据完整性和准确性。
磁盘文件:
每一个InnoDB表都会对应磁盘文件。
xxx.ibd:xxx代表的是表名,InnoDB引擎的每张表都会对应这样的一个表空间文件,存储该表的表结构(frm,sdi)、数据、和索引。
参数:innodb_file_per_table
show variables like 'innodb_file_per_table';
ibd2sdi emp.ibd 就会返回数据文件的json记录。
逻辑存储结构:
1、tablespace:表空间
2、segment:段
3、Extent:区,大小固定,为1M,可以包含64个页。
4、Page:页,大小固定,为16K
5、Row:行【再里边就包含事务id、指针、和列记录了 】
2、MyISAM
是MySQL早期默认的存储引擎。
特点:
不支持事务、不支持行级锁、不支持外键
支持表锁,访问速度快
磁盘文件:
tb_book.MYD :数据
tb_book.MYI:索引
tb_book_448(序号自增).sdi:表结构
3、Memory
表数据是存储在内存当中的,由于受到硬件问题、或断电问题的影响,只能将这些表作为临时表或缓存使用。
特点:
由于放到内存中,访问速度快。
支持hash索引(默认)
文件:
xxx.sdi:存储表结构信息,因为它的数据都是存储到内存中,所以不持久化到磁盘。
4、存储引擎特点-总结:
存储引擎选择
InnoDB:对数据一致性要求较高;
MyISAM:读操作和插入操作为主。【日志和评论】
Memory:做缓存。但是内存大小有限制。