数据库笔记
MySQL 支持的存储引擎
MySQL 的存储引擎主要分为两大类:事务型、非事务型,从上图中的“Transactions”一列可以看出来,只有 InnoDB 引擎支持事务。
在 MySQL 5.5 及之后的版本中,默认的存储引擎是 InnoDB,而在这之前是 MyISAM。
不同的存储引擎简介
- InnoDB
- MyISAM
- Memory
- CSV
- Merge
- Archive
- Blackhole
- Federated
- Example
InnoDB 是最广泛使用的存储引擎。支持事务,满足 ACID 约束。支持行级锁,崩溃恢复和多版本并发控制(MVCC)。是唯一支持外键引用完整性约束的存储引擎。
MyISAM 是一个很快的存储引擎。不支持事务。只支持表级锁。常用在 Web 和数据仓库中。
Memory 将数据表创建在内存中,是最快的存储引擎。不支持事务,支持表级锁。Memory 存储引擎很适合于创建临时表或者快速查询的场景。当数据库重启时,内存中的数据会丢失。
CSV 将数据存储为 CSV 格式的文件。CSV 是一种通用的、相对简单的文件格式,可以很方便的被其他应用(如 Excel)读取。
Merge 在新版 MySQL 中称为 MRG_MyISAM,它将一组相似的 MyISAM 表组合起来,视作一个表。Merge 表本身没有数据,实际是在操作底层的 MyISAM 表。Merge 存储引擎能够更简单的管理大量数据,适用于数据仓库(如服务器日志)等场景。
Archive 存储引擎针对高速插入进行了优化。它会将插入的数据实时压缩。不支持事务。由于数据被压缩,因此仅支持插入和查询两种功能。适用于用作仓库,存储大量归档数据。
Blackhole(黑洞)存储引擎接受但不存储任何数据(类似于 Linux 中的 /dev/null),查询时永远返回空集。该存储引擎可用于执行性能测试。
Federated(联合)存储引擎可以将多台物理服务器创建为一个逻辑数据库,数据存储在远程服务器中,本地不存储数据。本地服务器上的查询将在远程(联合)表上自动执行。适用于分布式场景。
Example 可以创建表,但不能存储或获取数据,可以用来学习如何编写新的存储引擎。
InnoDB、MyISAM、Memory 详解
https://imageslr.com/2020/db-engine.html#innodbmyisammemory-%E8%AF%A6%E8%A7%A3
数据库为什么用 B+ 树做索引?
用 B+ 树是为了减少 I/O 次数:
- 不可能把索引全部加载到内存中,只能逐一加载每个索引节点
- B+ 树的单个节点中包含的值个数越多,那么节点总数就会越少,I/O 次数也越少
- B+ 树高度一般为 2-4 层,查找记录时最多只需要 2-4 次 I/O
- 相反,二叉搜索树的高度高,所以需要的 I/O 次数更多
如果是内存数据库,不涉及磁盘 I/O,可以直接用二叉搜索树