存储引擎
存储引擎的概念
- MySQL 中的数据用各种不同的技术存储在文件(或者内存)中。
- 这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。
- 通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。
- 这些不同的技术以及配套的相关功能在 MySQL 中被称作存储引擎。
- 例如:如果你在研究大量的临时数据,你也许需要使用内存存储引擎。内存存储引擎能够在内存中存储所有的表格数据。也许需要一个支持事务处理的数据库(以确保事务处理不成功时数据的回退能力)选择支持事务的存储引擎。
查看存储引擎
show engines;
查看当前使用的存储引擎
show variables like '%storage_engine%';
MyISAM 和 InnoDB 的区别
主外键
- MyISAM:不支持。
- InnoDB:支持。
事务
- MyISAM:不支持。
- InnoDB:支持。
行表锁
- MyISAM:表锁,操作一条记录也会锁住整个表,不适合高并发的操作。
- InnoDB:行锁,操作时, 只锁某一行, 不对其它行有影响,适合高并发的操作。
缓存
- MyISAM:只缓存索引, 不缓存数据。
- InnoDB:不仅缓存索引, 还要缓存真实数据, 对内存的要求比较高, 而且内存的大小对性能有决定性的影响。
表空间
- MyISAM:小。
- InnoDB:小。
关注点
- MyISAM:性能。
- InnoDB:事务。
默认安装
- MyISAM:是
- InnoDB:是
文件结构
MyISAM
b.frm
:描述表结构文件,字段长度等。b.MYD(MYData)
:数据信息文件,存储数据信息(如果采用独立表存储模式)b.MYI(MYIndex)
:索引信息文件。
InnoDB
b.frm
:描述表结构文件,字段长度等。b.ibd
:存储数据信息和索引信息。