概念
- 数据库存储引擎是数据库底层软件组织,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据
- 不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,现在许多不同的数据库管理系统都支持多种不同的数据引擎,MySQL的核心就是存储引擎
- 用户可以根据不同的需求为数据库表选择不同的存储引擎
- 可以使用show engines命令查看MySQL的所有存储引擎,可以看到默认的存储引擎是innoDB,它支持事务、行级锁和外键
分类
- MyISAM:MySQL5.5之前的默认数据库引擎,最为常用,拥有较高的插入、查询速度,但不支持事务
- InnoDB:事务性数据的首选引擎,支持ACID事务,支持行级锁,MySQL5.5成为默认存储引擎
- Memory:所有数据置于内存的存储引擎,拥有较高的插入、更新和查询效率,但是会占用和数据量成正比的内存空间,并且其内容会在MySQL重新启动时丢失
- Archive:非常适合存储大量的独立的,作为历史记录的数据,因为它们不经常被读取,Archive拥有高效的插入速度,但对查询的支持相对较差
- Federated:将不同的MySQL服务器联合起来。逻辑上组成一个完整的数据库,适合分布式应用
功能 | MyISAM | Memory | InnoDB |
存储限制 | 256TB | RAM | 64TB |
支持事务 | NO | NO | YES |
支持全文索引 | YES | NO | NO |
支持B树索引 | YES | YES | YES |
支持哈希索引 | NO | YES | NO |
支持集群索引 | NO | NO | YES |
支持数据索引 | NO | YES | YES |
支持数据压缩 | YES | NO | NO |
空间使用率 | 低 | N/A | 高 |
支持外键 | NO | NO | YES |
操作
--查询当前数据库支持的存储引擎
show engines;
--查看当前的默认存储引擎
show variables like '%storage_engine%';
--查看某个表用了什么引擎(在显示结果里参数engine后面的就表示该表当前用的存储引擎)
show create table 表名;
--创建新表时指定存储引擎
create table 表名(...) engine = 存储引擎名;
--修改数据库引擎
alter table 表名 engine = 存储引擎名;