show ENGINES
使用上面的SQL脚本可以查询出MySQL支持的存储引擎。
我这里的版本是MySQL的8.0.31版本。
![](http://justzqq.com/wp-content/uploads/2023/03/image-1024x300.png)
可以得到大致这样的表。
整体来说常用有以下7(6+1)种吧:
- InnoDB:MySQL的默认存储引擎,支持事务、支持行级锁、支持表级锁、支持外键约束。不支持全文索引、不支持压缩表。
- MyISAM:MySQL 最早提供的存储引擎,不支持事务、不支持行级锁机制,也不支持外键约束。进支持表级锁、支持全文索引、支持压缩表。
- MEMORY:这种类型的数据表只存在于内存中,使用散列索引,数据的存取速度非常快。因为是存在于内存中,所以这种类型常应用于临时表中。
- ARCHIVE:英文意为档案,用于只是偶尔需要查询的历史数据进行存储,将数据进行压缩存储,占用空间小,但不支持索引和更新操作。
- Merge:MySQL 5.5版本后,Merge存储引擎已经被弃用并从MySQL中删除。因此在上面的表中看不到。将多个相同的 MyISAM 表合并为一个虚表,常应用于日志和数据仓库。
- CSV:将数据以CSV格式存储,适合用于导入和导出数据。
- BLACKHOLE:英文意为黑洞。这种存储引擎不实际存储数据,像黑洞一样,所有写入的数据都会被丢弃,但可以记录数据的写入日志。
InnoDB和MyISAM的相同点和不同点。
相同点:
InnoDB 和 MyISAM 实现索引都是使用 B+ 树,只是实现方式不同。
不同点:
事务 | 行级锁 | 表级锁 | 外键约束 | 全文索引 | 压缩表 | 高并发 | |
InnoDB | ✔ | ✔ | ✔ | ✔ | ✔ | ||
MyISAM | ✔ | ✔ | ✔ |
这里解释以下,InnoDB是支持高并发的,MyISAM 也有一定支持,但性能非常差劲。读操作和写操作是相互阻塞的,也就是说,在一个写操作完成之前,所有的读操作都必须等待。这意味着在高并发环境下,MyISAM可能会面临严重的性能问题。
存储引擎的选择。
在选择存储引擎时,需要根据应用程序的需求和特点进行选择。如果需要支持事务和外键约束,以及并发性能比较重要,应该选择 InnoDB。大多数情况下你都可以选择InnoDB。
如果需要读取数据的性能比较重要,可以选择 MyISAM。如果需要全文搜索索引或表压缩,应该选择 MyISAM。
通常认为,MyISAM在读取数据方面的性能表现较好,在大量读取的情况下效率更高。而 InnoDB 在处理事务和大量并发查询的情况下性能更好。选择存储引擎的时候需要根据应用程序的读写比例和并发性能的需求来选择。但也要时刻记住下面这段话。
《MySQL 高性能》:
不要轻易相信“MyISAM 比 InnoDB 快”之类的经验之谈,这个结论往往不是绝对的。在很多我们已知场景中,InnoDB 的速度都可以让 MyISAM 望尘莫及,尤其是用到了聚簇索引,或者需要访问的数据都可以放入内存的应用。