存储引擎
MySQL服务端体系结构
连接层 客户认证等
服务层 SQL接口等
引擎层 索引存在于引擎层,选择不同的存储引擎,索引的结构也是不同的。
存储层 磁盘、文件系统
存储引擎简介
存储引擎决定存储数据、建立索引、查询/更新数据的机制,它是基于表的,而不是基于库,因此又称为表类型。
创建表时指定引擎:
create table(
[...]
) ENGINE=INNODB [默认采用INNODB]
show engines;查询当前数据库支持哪些存储引擎
Engine | Support | Comment | Transactions | XA | Savepoints |
---|---|---|---|---|---|
PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
CSV | YES | CSV storage engine | NO | NO | NO |
MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
MyISAM | YES | MyISAM storage engine | NO | NO | NO |
MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
ARCHIVE | YES | Archive storage engine | NO | NO | NO |
InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
FEDERATED | NO | Federated MySQL storage engine | null | null | null |
存储引擎特点
InnoDB
高可靠、高性能。mysql5.5之后的默认存储引擎
特性:
- DML(增删改操作)遵循AICD模型(原子性atomicity、一致性consistency、隔离性isolation、持久性durability),支持事务。
- 行级锁,提高并发性能。
- 支持外键,保证数据完整性和正确性。
InnoDB引擎的每张表对应一个表空间文件:xxx.ibd,存储表结构(frm/sdi)、数据、索引。
逻辑存储结构:
表空间----》段----》区----》页----》行-----》字段
(图书馆-书架-书-页-一行-每个字)
一个区1M,页16K,一个区存64个页
MyISAM
mysql早期的默认引擎。
特性:
不支持事务,不支持外键
支持表锁,不支持行锁
访问速度块
每个表对应3个文件:xxx.frm/sdi表结构、xxx.MYD数据、xxx.MYI索引
Memory
数据存储在内存中,一般存放临时表或缓存。
特性:
存放在内存中,访问速度快
支持hash索引(默认)
每个表对应一个表结构文件:xxx.sdi 数据在内存中。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cou4Dqh9-1686921392723)(image.png)]
重点关注InnoDB和MyISAM在事务、锁、外键上的区别
存储引擎的选择
InnoDB最常用,myisam被mongodb取代,memory被redis取代。
和MyISAM在事务、锁、外键上的区别
存储引擎的选择
InnoDB最常用,myisam被mongodb取代,memory被redis取代。