MySQL引擎介绍

MySQL数据库引擎取决于MySQL在安装选项。在缺省情况下,MYSQL支持三个引擎:ISAM、MYISAM和HEAP。另外还有常用的两种类型INNODB和BERKLEY(BDB)。甚至可以使用MySQL++ API自己做一个引擎。

1、数据库引擎介绍

下面介绍几种数据库引擎:
ISAM:
ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到数据库被查询的次数要远大于更新的次数。因此,ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源。ISAM的两个主要不足之处在于,它不支持事务处理,也不能够容错:如果你的硬盘崩溃了,那么数据文件就无法恢复了。如果你正在把ISAM用在关键任务应用程序里,那就必须经常备份你所有的实时数据,通过其复制特性,MYSQL能够支持这样的备份应用程序。

MyISAM:
MyISAM是MySQL的ISAM扩展格式和缺省的数据库引擎。
除了提供ISAM里所没有的索引和字段管理的大量功能,MyISAM还使用一种表格锁定的机制,来优化多个并发的读写操作,其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间。
MyISAM还有一些有用的扩展,例如用来修复数据库文件的MyISAMCHK工具和用来恢复浪费空间的 MyISAMPACK工具。
MYISAM强调了快速读取操作,这可能就是为什么MySQL受到了WEB开发如此青睐的主要原因:在WEB开发中你所进行的大量数据操作都是读取操作。所以,大多数虚拟主机提供商和INTERNET平台提供商只允许使用MYISAM格式。
MyISAM格式的一个重要缺陷就是不能在表损坏后恢复数据。

HEAP:
HEAP允许只驻留在内存里的临时表格。驻留在内存里让HEAP要比ISAM和MYISAM都快,但是它所管理的数据是不稳定的,而且如果在关机之前没有进行保存,那么所有的数据都会丢失。
HEAP表格在你需要使用SELECT表达式来选择和操控数据的时候非常有用。
在数据行被删除的时候,HEAP也不会浪费大量的空间。要记住,在用完表格之后就删除表格。

InnoDB:
InnoDB数据库引擎就是造就MySQL灵活性的技术产品。ISAM和MyISAM数据库引擎不支持事务处理(transaction process),也不支持外来键,而InnoDB对这些能够支持。 
MySQL 官方对InnoDB说明如下
InnoDB给MySQL提供了具有提交、回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。
InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读,这些特色增加了多用户部署和性能。没有在InnoDB中扩大锁定的需要,因为在InnoDB中行级锁定适合非常小的空间。
InnoDB也支持FOREIGN KEY强制。在SQL查询中,你可以自由地将InnoDB类型的表与其它MySQL的表的类型混合起来,甚至在同一个查询中也可以混合。
InnoDB是为处理巨大数据量时的最大性能设计,它的CPU效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的。
InnoDB存储引擎被完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。
InnoDB存储它的表&索引在一个表空间中,表空间可以包含数个文件(使用共享表空间的表)。而MyISAM表中每个表被存在单独的文件中。
InnoDB表可以是任何尺寸,即使在文件尺寸被限制为2GB的操作系统上(这个只是限于使用共享表空间的表)。
Windows Essentials installer中InnoDB为Windows上MySQL的默认表。
InnoDB被用来在众多需要高性能的大型数据库站点上产生。著名的Internet新闻站点Slashdot.org运行在InnoDB上。 Mytrix, Inc.在InnoDB上存储超过1TB的数据,还有一些其它站点在InnoDB上处理平均每秒800次插入/更新。

2、应用场景

MyISAM适合:
1)做很多count 的计算;2)插入不频繁,查询非常频繁;3)没有事务。
InnoDB适合:
1)可靠性要求比较高,或者要求事务;2)表更新和查询都相当的频繁,并且表锁定的机会比较大的情况。

3、引擎查看

1)看你的MySQL现在已提供什么存储引擎: mysql> show engines;
2)看你的MySQL当前默认的存储引擎: mysql> show variables like '%storage_engine%';
3)你要看某个表用了什么引擎(在显示结果里参数engine后面的就表示该表当前用的存储引擎): mysql> show create table 表名;

4、性能测试

测试方法:连续提交10个query, 表记录总数:38万 , 时间单位 s (环境Micrisoft window xp sp2 , Intel(R) Pentinum(R) M processor 1.6oGHz 1G 内存,默认配置,打开了InnoDB日志写入)
引擎类型                    MyISAM                InnoDB              性能相差
count                      0.0008357            3.0163                3609
查询主键                   0.005708              0.1574                27.57
查询非主键                  24.01                   80.37                 3.348
更新主键                   0.008124             0.8183                 100.7
更新非主键                0.004141             0.02625               6.338
插入                         0.004188             0.3694                 88.21
1)加了索引以后,对于MyISAM查询可以加快:4 206.09733倍,对InnoDB查询加快510.72921倍,同时对MyISAM更新速度减慢为原来的1/2,InnoDB的更新速度减慢为原来的1/30。要看情况决定是否要加索引,比如不查询的log表,不要做任何的索引。
2)如果你的数据量是百万级别的,并且没有任何的事务处理,那么用MyISAM是性能最好的选择。 

5、空间大小

InnoDB表比MyISAM表占用更多的磁盘空间。
(38w记录的表)
引擎类型                    MyISAM               InnoDB
数据                       53,924 KB           58,976 KB
索引                       13,640 KB           21,072 KB
占用总空间                 67,564 KB           80,048 KB


(176W万记录的表)
引擎类型                MyIsam               InnoDB
数据                   56,166 KB           90,736 KB
索引                   67,103 KB           88,848 KB
占用总空间             123,269 KB          179,584 KB


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值