?目录
1、存储引擎总结对比
2、存储引擎明细对比
2.1、MyISAM
2.2、MEMORY
2.3、InnoDB(默认)
3、存储引擎选择
问题:MySQL有哪些存储引擎?默认是哪个?有什么区别?如何选择存引擎?
1、存储引擎总结对比
在mysql5之后,支持的存储引擎有9种,但是常用的就那么几种,而且默认支持的是InnoDB。
我们可以使用命令来看看当前数据库可以支持的存储引擎有哪些。
show engines;
也可以查询当前表使用什么存储引擎: SHOW TABLE STATUS from 数据库库名 where Name=’表名’
SHOW TABLE STATUS from user_db where Name='t_user';
不同的存储引擎都有各自的特点,以适应不同的需求,如表所示,下面我们来对常用的3种存储引擎进行一个对比。为了做出选择,首先要考虑每一个存储引擎提供了哪些不同的功能。
功能 | MyISAM | MEMORY | InnoDB |
---|
存储限制 | 256TB | RAM | 64TB | 支持事务 | NO | NO | YES | 支持全文索引 | YES | NO | NO | 支持B树索引 | YES | YES | YES | 支持HASH索引 | NO | YES | NO | 支持数据缓存 | NO | NO | YES | 支持数据压缩 | YES | NO | NO | 空间使用率 | 低 | N/A | 高 | 支持外键 | NO | NO | YES |
2、存储引擎明细对比
2.1、MyISAM
-
主要特点:不支持事务,也不支持外键,存储速度、访问速度快,表级锁定,对事务完整性没有要求或者以SELECT、INSERT为主的应用基本都可以使用这个引擎来创建表; -
磁盘存储文件:每个MyISAM在磁盘上存储成3个文件,其中文件名和表名都相同,但是扩展名分别为:
- frm--存储表结构
- MYD--MYData,存储数据
- MYI--MYIndex,存储索引
-
支持3种不同的存储格式:
- 静态(固定长度)表--默认的存储格式,优点在于存储速度非常快,容易发生缓存,而且表发生损坏后也容易修复,缺点是占空间;
- 动态(可变长)表--优点是节省空间,但更新频繁容易产生碎片,故障恢复较难;
- 压缩表--支持数据压缩,占用空间非常小
2.2、MEMORY
- 主要特点:数据存储在内存,宕机数据会丢失,不支持TEXT和BLOB类型,因VARCHAR在MySQL内部当做长度固定不变的CHAR类型,所以支持;
- 磁盘存储文件:frm--存储表结构;
- 索引:支持hash索引(默认)、B树索引;
2.3、InnoDB(默认)
- 主要特点:支持事务,默认的事务隔离级别为Repeatable read(可重复读),通过MVCC(并发版本控制)来实现的,支持外键约束,支持自动增加列AUTO_INCREMENT属性,支持自动灾难恢复,热备,支持数据缓存,行级锁定,比较适合处理多重并发更新请求:
- 磁盘存储文件:
- frm--存储表结构
- ibd--存储数据和索引,位于B+数的叶子节点上,分区表有独立的ibd文件;
- 索引:B树索引
3、存储引擎选择
使用哪一种引擎需要灵活选择,一个数据库中多个表可以使用不同引擎以满足各种性能和实际需求,使用合适的存储引擎,将会提高整个数据库的性能。 选择合适的存储引擎的标准可以分为:
- 是否支持事务?--InnoDB
- 是否需要使用热备?--InnoDB
- 是否需要外键支持?--InnoDB
- 是否支持崩溃恢复?--InnoDB、MyISAM
- 是否以读为主的业务?--MyISAM
- 是否数据较小,且被频繁使用,允许丢失?--MEMORY
然后按照标准,选择对应的存储引擎即可。
|