1 MySQL存储引擎简介
MySQL的核心是存储引擎,DBMS使用存储引擎进行创建、查询、更新和删除数据的操作,不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能。MySQL提供了多个不同的存储引擎,在MySQL中,不需要再整个服务器中使用同一种存储引擎,针对具体的要求,可以对每一个表使用不同存储引擎,MySQL提供的存储引擎有:
Engine | Support | Comment | Transactions | XA | Savepoints |
---|---|---|---|---|---|
InnoDB | DEFAULT | Supports transactions,row-level locking,and foreign keys | YES | YES | YES |
MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
MyISAM | YES | MyISAM storage engine | NO | NO | NO |
CSV | YES | CSV storage engine | NO | NO | NO |
ARCHIVE | YES | Archive storage engine | NO | NO | NO |
PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
2 InnoDB存储引擎
InnoDB存储引擎是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键,是MySQL的默认存储引擎。
3 MyISAM存储引擎
MyISAM基于ISAM的存储引擎,是在web、数据存储和其他应用环境下最常使用的存储引擎之一,拥有较高的插入、查询速度,但不支持事务。
- 注意:使用MyISAM引擎创建数据库,将产生3个文件,文件的名字以表的名字开始,扩展名指出文件类型:frm文件存储表定义,数据文件的扩展名为.MYD,索引文件的扩展名是.MYI
4 MEMORY存储引擎
MEMORY存储引擎将表中的数据存储到内存中,为查询和引用其他表数据提供快速访问。
5 存储引擎的选择
功能 | InnoDB | MyISAM | Memory | Archive |
---|---|---|---|---|
存储限制 | 64TB | 256TB | RAM | None |
支持事务 | Yes | No | No | No |
支持全文索引 | No | Yes | No | No |
支持数索引 | Yes | Yes | Yes | No |
支持哈希索引 | No | No | Yes | No |
支持数据缓存 | Yes | No | N/A | No |
支持外键 | Yes | No | No | No |
- MyISAM和InnoDB的区别:
- InnoDB支持事务,MyISAM不支持
- InnoDB支持外键,而MyISAM不支持
- InnoDB是聚集索引,数据文件是和索引绑在一起的,MyISAM是非聚集索引,数据文件是分离的
- InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快
- 如何选择存储引擎:
- 支持事务、增删改多、并发控制——InnoDB
- 存储、查询、全文索引——MyISAM
- 临时存放数据、数据量不大——Memory,主要用来建立临时表,存放查询的中间结果
- 只有插入和查询——Archive,例如日志归档