MySQL有多种存储引擎,每种存储引擎有各自的优缺点,可以择优选择使用:
- MyISAM
- InnoDB
- MERGE
- MEMORY(HEAP)
- BDB(BerkeleyDB)
- EXAMPLE
- FEDERATED
- ARCHIVE
- CSV
- BLACKHOLE
MySQL支持数个存储引擎作为对不同表的类型的处理器。MySQL存储引擎包括处理事务安全表的引擎和处理非事务安全表的引擎:
MyISAM
MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。
MEMORY
MEMORY存储引擎提供“内存中”表。MERGE存储引擎允许集合将被处理同样的MyISAM表作为一个单独的表。就像MyISAM一样,MEMORY和MERGE存储引擎处理非事务表,这两个引擎也都被默认包含在MySQL中。
注释:MEMORY存储引擎正式地被确定为HEAP引擎。
InnoDB
InnoDB和BDB存储引擎提供事务安全表。默认引擎,BDB被包含在为支持它的操作系统发布的MySQL-Max二进制分发版里。
EXAMPLE
EXAMPLE存储引擎是一个“存根”引擎,它不做什么。你可以用这个引擎创建表,但没有数据被存储于其中或从其中检索。
NDB Cluster
NDB Cluster是被MySQL Cluster用来实现分割到多台计算机上的表的存储引擎。
ARCHIVE
ARCHIVE存储引擎被用来无索引地,非常小地覆盖存储的大量数据。
CSV
CSV存储引擎把数据以逗号分隔的格式存储在文本文件中。
BLACKHOLE
BLACKHOLE存储引擎接受但不存储数据,并且检索总是返回一个空集。
FEDERATED
FEDERATED存储引擎把数据存在远程数据库中。
比较常用的是MyISAM和InnoBD
构成上的区别:
每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。
- .frm文件存储表定义。
- 数据文件的扩展名为.MYD (MYData)。
- 索引文件的扩展名是.MYI (MYIndex)。
基于磁盘的资源是InnoDB表空间数据文件和它的日志文件,InnoDB 表的大小只受限于操作系统文件的大小,一般为 2GB.
事务处理上方面:
MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持
InnoDB提供事务支持事务,外部键(foreign key)等高级数据库功能
如何选择mysql的存储引擎
在开发中,我们经常使用的存储引擎 myisam / innodb/ memory
myisam 存储: 如果表对事务要求不高,同时是以查询和添加为主的,我们考虑使用myisam存储引擎. ,比如 bbs 中的 发帖表,回复表.
INNODB 存储: 对事务要求高,保存的数据都是重要数据,我们建议使用INNODB,比如订单表,账号表.
Memory 存储,比如我们数据变化频繁,不需要入库,同时又频繁的查询和修改,我们考虑使用memory, 速度极快.
Memory 存储建立的表和数据全部存储在内存中,不存在与磁盘上,所以速度极快,无需持久化保存的,建议使用
各存储引擎的区别(主要从这几个方面回答)
1. 事务安全
2. 查询和添加速度
3. 支持全文索引
4. 锁机制
5. 外键 MyISAM 不支持外键, INNODB支持外键.
如果你的数据库的存储引擎是myisam,请一定记住要定时进行碎片整理
因为当表的存储引擎为myisam时,删除表中数据,MySQL中存储该表的文件大小不变,
长久以往,文件会越来越大,因此要定时进行碎片整理
我们应该定义对myisam进行整理
optimize table tableName;