MySQL常用存储引擎
特性 | MyISAM | InnoDB | MEMORY |
---|---|---|---|
存储限制 | 256TB | 64TB | RAM |
事务 | 不支持 | 支持 | 不支持 |
锁机制 | 表级锁 | 行级锁(默认) | 表级锁 |
外键 | 不支持 | 支持 | 不支持 |
B树索引 | 支持 | 支持 | 支持 |
哈希索引 | 不支持 | 支持 | 支持 |
全文索引 | 支持 | 支持 | 不支持 |
索引缓存 | 支持 | 支持 | 支持 |
注:
- 以上针对MySQL 5.6以后的版本
- InnoDB虽然支持哈希索引,但不能人为干预是否在一张表中生成哈希索引,该引擎会根据表的使用情况自动生成哈希索引。
- InnoDB默认是行级锁,也支持表级锁。
这里主要讲下InnoDB的锁分类:
行
级
锁
{
共
享
锁
(
S
)
排
他
锁
(
X
)
行级锁\begin{cases} 共享锁(S)\\ 排他锁(X)\\ \end{cases}
行级锁{共享锁(S)排他锁(X)
表
级
锁
{
共
享
锁
(
S
)
排
他
锁
(
X
)
意
向
共
享
锁
(
I
S
)
意
向
排
他
锁
(
I
X
)
表级锁\begin{cases} 共享锁(S)\\ 排他锁(X)\\ 意向共享锁(IS)\\ 意向排他锁(IX)\\ \end{cases}
表级锁⎩⎪⎪⎪⎨⎪⎪⎪⎧共享锁(S)排他锁(X)意向共享锁(IS)意向排他锁(IX)
1)意向锁是InnoDB自动加的,不需要用户干预。
2)行级锁是基于索引的,也就是说,只有通过索引条件检索数据,InnoDB 才使用行级锁,否则,InnoDB 将使用表锁!
适用场景:
- MyISAM存储引擎:不支持事务也不支持外键,但提供高速存储和检索,适用于以查询或插入数据为主的场合。
- InnoDB存储引擎:MySQL的默认存储引擎,支持事务机制,适用于频繁的更新、删除操作且是并发操作的场合。
- MEMORY存储引擎:该存储引擎使用内存来存储数据,因此适用于数据量较小、对安全性要求不高且需要进行快速读写的场合。