1.mysql常用存储的对比(引用mysql数据库开发优化与管理维护一书的表格)
特点 | Myisam | BDB | Memory | InnoDB | NDB |
---|---|---|---|---|---|
存储限制 | 没有 | 没有 | 有 | 64TB | 有 |
事务安全 | 支持 | 支持 | |||
锁机制 | 表锁 | 页锁 | 表锁 | 行锁 | 行锁 |
B树索引 | 支持 | 支持 | 支持 | 支持 | 支持 |
哈希索引 | 支持 | 支持 | 支持 | ||
全文索引 | 支持 | ||||
集群索引 | 支持 | ||||
数据缓存 | 支持 | 支持 | 支持 | ||
索引缓存 | 支持 | 支持 | 支持 | 支持 | |
数据可压缩 | 支持 | ||||
空间使用 | 低 | 低 | N/A | 高 | 低 |
内存使用 | 低 | 低 | 中等 | 高 | 高 |
批量插入的速度 | 高 | 高 | 高 | 低 | 高 |
支持外键 | 支持 |
MyISAM是Mysql默认的存储引擎,MyISAM不支持事务,也不支持外键,优势在于访问速度快,对事物完整性没有要求或者以SELECT INSERT为主的应用基本采用这个引擎来建表。
MyISAM表是独立于操作系统的,移植性比较强。每当我们建立一个MyISAM引擎的表时,就会在本地磁盘上建立三个文件,文件名就是表名。
1.tb_demo.frm,存储表定义;
2.tb_demo.MYD,存储数据;
3.tb_demo.MYI,存储索引。
MyISAM存储引擎特别适合在以下几种情况下使用:
1.选择密集型的表。MyISAM存储引擎在筛选大量数据时非常迅速,这是它最突出的优点。
2.插入密集型的表。MyISAM的并发插入特性允许同时选择和插入数据。例如:MyISAM存储引擎很适合管理邮件或Web服务器日志数据。
2.2 InnoDB
InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比Myisam的存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。
InnoDB主要使用环境:
1.用于事务处理应用程序,支持外键。
2.适用于对事务完整性要求高,在并发条件下要求数据的一致性。
3.数据操作主要包括插入 查询 删除 更新。
4.类似于计费和财务等系统对数据精准性要求比较高的系统。
2.3 MEMORY使用MySQL Memory存储引擎的出发点是速度。为得到最快的响应时间,采用的逻辑存储介质是系统内存。虽然在内存中存储表数据确实会提供很高的性能,但当mysqld守护进程崩溃时,所有的Memory数据都会丢失。获得速度的同时也带来了一些缺陷。它要求存储在Memory数据表里的数据使用的是长度不变的格式,这意味着不能使用BLOB和TEXT这样的长度可变的数据类型,VARCHAR是一种长度可变的类型,但因为它在MySQL内部当做长度固定不变的CHAR类型,所以可以使用。
一般在以下几种情况下使用Memory存储引擎:
1.目标数据较小,而且被非常频繁地访问。在内存中存放数据,所以会造成内存的使用,可以通过参数max_heap_table_size控制Memory表的大小,设置此参数,就可以限制Memory表的最大大小。
2.如果数据是临时的,而且要求必须立即可用,那么就可以存放在内存表中。
3.存储在Memory表中的数据如果突然丢失,不会对应用服务产生实质的负面影响。
2.4 MERGEmerge用于将一系列等同的MyISAM表以逻辑方式组合在一起,并作为一个对象引用它们。merge表的优点在于可以突破对单个MyISAM表大小的限制,并且通过将不同的表分布在多个磁盘上,可以有效的改善merge表的访问效率。这对于数据仓储的VLDB环境十分适合。