存储引擎是什么?
存储引擎是数据库的核心
百度百科
MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。
存储引擎有哪些
使用 SHOW ENGINES;
查看
存储引擎 | MyISAM | InnoDB | BDB | Memory | Archive | NDB |
---|---|---|---|---|---|---|
存储限制 | 无 | 64TB | 无 | 有 | 无 | 有 |
事务 | 支持 | 支持 | ||||
锁级别 | 表锁 | 行锁 | page | 表 | 行 | 行 |
MVCC(并发控制) | 支持 | 支持 | 支持 | |||
全文索引 | 支持 | |||||
集群索引 | 支持 | |||||
数据缓存和索引缓存 | 支持 | 支持 | 支持 | |||
数据压缩 | 支持 | 支持 | ||||
批量插入速度 | 高 | 低 | 高 | 高 | 很高 | 高 |
集群数据库支持 | 支持 | |||||
外键支持 | 支持 | |||||
适用场景 | 不需要事务的操作;插入、更新少,读取频繁;频繁的统计计算。 | 需要事务的操作;更新数据需要使用行级锁;大数据量读写;大型互联网应用。 | 类似 InnoDB | 数据量不大,需要被频繁的访问,而且数据丢失不会对业务产生比较严重的影响。 | 存储引擎基本上用于数据归档,作为日志表 | 集群 |
特点 | 可替代InnoDB的事务引擎,支持COMMIT、ROLLBACK和其他事务特性 | 数据存储在内存中,重启或崩溃,数据消失,使用哈希索引 | 只支持Insert和Select操作,支持索引,非常适合存储归档数据, 目标:高速插入和压缩功能 | 集群存储引擎,数据全部放在内存中,高可用、高性能的集群系统 |
注:新 MySQL 的存储引擎默认是 InnoDB
以下内容来自 bilibili 视频笔记
MySQL中常用的四种存储引擎分别是: MyISAM、InnoDB、MEMORY、ARCHIVE。MySQL 5.5版本后默认的存储引擎为InnoDB。
InnoDB 存储引擎
InnoDB 是 MySQL 默认的事务型存储引擎,使用最广泛,基于聚簇索引建立的。InnoDB 内部做了很多优化,如能够自动在内存中创建自适应 hash 索引,以加速读操作。
优点:支持事务和崩溃修复能力;引入了行级锁和外键约束。
缺点:占用的数据空间相对较大。
适用场景:需要事务支持,并且有较高的并发读写频率。
MyISAM存储引擎
数据以紧密格式存储。对于只读数据,或者表比较小、可以容忍修复操作,可以使用 MyISAM 引擎。MyISAM 会将表存储在两个文件中,数据文件 .MYD 和索引文件 .MYI。
优点:访问速度快。
缺点:MyISAM 不支持事务和行级锁,不支持崩溃后的安全恢复,也不支持外键。
适用场景:对事务完整性没有要求;表的数据都会只读的。
MEMORY 存储引擎
MEMORY 引擎将数据全部放在内存中,访问速度较快,但是一旦系统奔溃的话,数据都会丢失。
MEMORY 引擎默认使用哈希索引,将键的哈希值和指向数据行的指针保存在哈希索引中。
优点:访问速度较快。
缺点:
哈希索引数据不是按照索引值顺序存储,无法用于排序。 不支持部分索引匹配查找,因为哈希索引是使用索引列的全部内容来计算哈希值的。 只支持等值比较,不支持范围查询。 当出现哈希冲突时,存储引擎需要遍历链表中所有的行指针,逐行进行比较,直到找到符合条件的行。
ARCHIVE 存储引擎
ARCHIVE 存储引擎非常适合存储大量独立的、作为历史记录的数据。ARCHIVE 提供了压缩功能,拥有高效的插入速度,但是这种引擎不支持索引,所以查询性能较差。