数据库存储引擎是数据库底层软件组件,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能。使用不同的存储引擎,还可以获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。Mysql的核心就是存储引擎。
Mysql提供了不同的存储引擎,包括处理事务安全表的引擎和处理非事务安全表的引擎。在Mysql中,不需要在整个服务器中使用一种引擎。针对具体要求可以对每一个表使用不同的存储引擎。
Mysql支持多种存储引擎,如InnoDB、MylSAM、Memory、Merge、Archive、CSV、Federated等等。
一、MylSAM存储引擎
1.1 MylSAM存储引擎的特点
- Mysql 5.5之前默认使用MylSAM引擎,Mysql5.5之后默认使用InnoDB引擎;
- MylSAM引擎读取数据较快,占用资源较少,不支持事务,不支持外键约束,但支持全文索引;
- 读写相互阻塞,也就是说读数据时就不可写数据,学数据时就不可读数据;
- MylSAM引擎只能缓存索引,而不能缓存数据;
1.2 MylSAM使用场景
- 不需要事务支持的业务;
- 适用于读数据较多的业务;
- 并发相对较低、数据修改相对较少的业务;
-硬件资源较差的机器可以考虑使用MylSAM引擎;
二、InnoDB存储引擎
2.1 InnoDB存储引擎的特点
- 事务型数据库的首选引擎,支持事务安全表,支持行锁定和外键,Mysql5.5.5版本之后,InnoDB作为默认存储引擎;
- 具有提交、回滚和崩溃恢复能力的事务安全存储引擎,能处理巨大数据量,性能及效率高,完全支持外键完整性约束;
- 具有非常高效的缓存特性,可以缓存索引也可缓存数据,对硬件要求较高;
- 使用InnoDB时,将在Mysql数据目录下的创建一个名为ibdata1的10M大小的自动扩展数据文件,以及两个ib_logfile0和ib_logfile1的5M大小的日志文件;
2.2 InnoDB使用场景
- 需要数据支持的业务,高并发的业务;
- 数据更新较为频繁的场景,比如BBS、SNS、微博等;
- 数据一致性要求较高的业务,比如充值转账、银行卡转账;
三、Memory存储引擎
3.1 Memory存储引擎的特点
- Memory存储引擎将表中的数据存储到内存中,为查询和引用其他表数据提供快速访问;
- Memory存储引擎执行HASH和BTREE索引,不支持BLOB和TEXT列,支持AUTO_INCREMENT列和对可包含NULL值的列的索引;
- 当不再需要Memory表的内容时,要释放被Memory表使用的内存,应该执行DELETE FROM或TRUNCATE TABLE,或者删除整个表;
四、如何选择合适的存储引擎
不同的业务需要选择不同的而存储引擎,可以参考以下几点进行选择:
- 如果要提供提交、回滚和崩溃恢复能力的事务安全能力,并要求实现并发控制,InnoDB是个很好的选择;
- 如果数据表主要用来插入和查询记录,则MylSAM引擎能提供较高的处理效率;
- 如果只是临时存放数据,数据量不大,并且不需要较高的安全性,可以选择将数据保存在内存中的Memory引擎,使用该引擎作为临时表,存放查询的中间结果;
- 如果只有INSERT和SELECT操作,可以选择Archive引擎,支持高并发的插入操作,如记录日志信息,可以使用Archive引擎;
主要的三个数据引擎所支持的功能如下表:
功能 | MylSAM | Memory | InnoDB |
---|---|---|---|
存储限制 | 256TB | RAM | 64TB |
支持事务 | NO | NO | YES |
支持全文索引 | YES | NO | NO |
支持数据索引 | YES | YES | YES |
支持哈希缓存 | NO | YES | NO |
支持数据缓存 | NO | N/A | YES |
支持外键 | NO | NO | YES |
五、查看及修改表的默认存储引擎
show engines\G; #查看数据库支持的索引
show variables like ‘default_storage_engine‘; #查看数据库默认的存储引擎
show variables like ‘%engine%‘; #查看全部的默认引擎
show create table t1\G; #查看t1表默认的引擎
alter table t1 engine=myisam; #修改t1表的默认引擎为MylSAM