深入分析mysql数据库引擎的介绍、区分、创建和性能测试
MySQL数据库引擎取决于MySQL编译安装后,添加一个新的引擎,你必须重新编译MySQL。在默认情况下,MySQL支持三引擎:ISAM,MyISAM,堆。其他两型,InnoDB和BERKLEY(BDB),经常使用。如果技术超,你也可以使用MySQL + API使发动机。这里有几个数据库引擎:ISAM ISAM是一个定义明确的时间:测试数据表管理方法。设计时,认为数据库被查询的次数比更新的数量大得多。因此,ISAM执行读操作快速,不占用大量的内存和存储资源,该两个主要缺点是它不支持事务处理、容错性:如果你的硬盘崩溃,数据文件将不可恢复。如果你使用的是ISAM在关键任务的应用程序,你必须经常备份你所有的实时数据,并可以通过MySQL复制功能支持这样的备份应用程序。
MyISAM:MyISAM是MySQL的ISAM扩展格式,默认的数据库引擎,除了提供一个功能指标和现场管理不多,MyISAM也用一种锁定机制,来优化多个并发的读写操作,成本往往是你需要运行的优化表命令恢复更新机制浪费了space.myisam也有一些有用的扩展,如用于修复用来恢复废space.myisam强调快速的读操作数据库文件和MyISAMPack工具myisamchk工具,这可能是主要原因为什么MySQL一直如此受欢迎,网站开发:网站开发,大量的数据操作,你是读操作因此,大多数的V。虚拟主机提供商和网络平台服务提供者只允许使用MyISAM格式。在MyISAM格式的一个重要缺陷是,数据不能在表损坏恢复。
堆:堆允许临时表,只驻留内存,在内存使堆比ISAM和MyISAM更快,但它所管理的数据是不稳定的,如果它不保存关机前,所有的数据都将丢失。当数据线删除,堆不浪费大量的空间。堆表是非常有用的当你需要使用SELECT表达式来选择和操作数据。记住,的形式使用后删除表。
InnoDB:InnoDB数据库引擎的技术使MySQL灵活的直接产品,在技术和MySQL + api.when你使用MySQL,几乎每一个挑战,你面对的是来自ISAM和MyISAM数据库引擎。它不支持事务处理(事务处理),也不支持外键。虽然它比ISAM和MyISAM引擎慢很多,InnoDB包括支持事务处理和外键,其中前两个引擎没有。正如前面提到的,如果你的设计需要这些特征之一或者,你是被迫使用一个引擎。
如果你觉得你真的很熟练,你也可以使用MySQL + API来创建自己的数据库引擎。这个API为您提供了经营领域、功能记录,表格,数据库连接,安全帐户,和建筑的所有其他功能,如MySQL数据库的需要。它超出了这篇文章范围彻底解释的API,但它是非常重要的你了解MySQL + API和它背后的技术的存在。据估计,这个插件数据库引擎的模型可以被用来创建一个本地XML(XML提供商)提供MySQL。(任何MySQL + API开发阅读本本文认为这是一个要求。)
MyISAM和InnoDB的区别
InnoDB和MyISAM是最常用的两种表类型使用MySQL的时候,这两个表类型都有自己的优点和缺点,这取决于具体的应用,基本的区别是,MyISAM类型不支持事务处理等高级处理,而InnoDB类型的表supports.myisam型强调性能,及其执行倍比InnoDB类型更快,但是不提供事务支持。InnoDB提供事务支持,如外部键,和其他先进的数据库功能。
下面是一些细节和具体的区别:
1.innodb不支持全文索引的类型。
2.innodb不保存表的具体行数,也就是说,当执行select count(*)fromtable,InnoDB会扫描整个表来计算行数,但MyISAM只是读取保存的行数。请注意,当计数(*)语句包含WHERE条件,两个表的操作是一样的。
3、对auto_increment类型字段,InnoDB必须包含这个领域的唯一指标,但在MyISAM,它可以建立与其他领域的联合指数。
当4.delete从表,InnoDB不重建一个表,但一行行。
5.load表重新操作不适合InnoDB。解决的办法是改变InnoDB表MyISAM表,然后将数据导入InnoDB表,但它并不适用于额外的InnoDB特征(如外键)。
此外,在InnoDB表的行锁也不是绝对的。如果执行SQL语句,MySQL无法确定要扫描的范围。InnoDB表也将锁定整个表,如updatetable集数= 1名一%。
主要的区别是,InnoDB支持事务处理和外键和行级锁。MyISAM不支持。所以MyISAM往往容易被认为是适用于小型项目。
作为使用MySQL的用户角度,InnoDB和MyISAM都喜欢它。但从我目前的操作和维护的数据库平台,以满足需求:99.9%的稳定性,方便的可扩展性和高可用性,MyISAM绝对是我的第一选择。
原因如下:
1,首先,我提出的大部分项目的平台上读写的少,和MyISAM的阅读成绩比InnoDB强多了。
2、对MyISAM的索引和数据是分开的,和索引压缩,和内存使用增加很多。更多的指标可以被加载,和InnoDB是紧密联系在一起的指标和数据,和无压缩,它可以导致InnoDB要大于MyISAM。
3,从平台的角度来看,通常1,将2个月应用开发者不小心更新范围表哪里写错了,因为这表不能正常使用,这个时候MyISAM的优势表现,只是从包的复制出相应的表格文件,把它放在一个数据库目录,然后转储到SQL然后回到主图书馆,和相应的binlog补丁。如果是InnoDB,恐怕没那么快。不要告诉我,InnoDB定期出口xxx.sql机制,因为在我的平台数据的最小量基本上是G.
应用逻辑4,从我的联系人,选择数量和顺序(*)是最常见的,大概占到总数的60%的SQL语句,这个操作实际上是InnoDB会锁定表,很多人认为我们是唯一的行级锁,在其关键是有效的,将锁定非主键的表。
5、经常有许多应用部门需要我给他们一些常规表的数据,MyISAM是非常方便的,只要把相应的表frm.myd,MYI文件,让他们开始对线在对应的数据库版本,和InnoDB需要出口xxx.sql,因为别人文件的字典数据文件的影响,其他不可用。
6、如果插入和MyISAM比写操作,InnoDB还达不到写MyISAM的表现,如果它是基于InnoDB更新操作的指标,而MyISAM可能不会,但再高的并发写入,也从图书馆的问题可以理解,以及通过多实例库表结构来解决。
7、如果是使用MyISAM引擎,将可以大大加快应用部门的发展。只要他们做selectcount(*)在合并表操作,非常适合于对大型项目的行数以百万计的总数,如日志、调查与统计。
当然,我们不是绝对不使用事务的项目如股票市场仿真程序,我使用InnoDB,约200000活跃用户,也很容易处理,所以我也很爱我们,但如果从数据库应用平台,我是第一个表。
此外,有些人可能会说,你不能写太多的反MyISAM的,但我可以使它通过结构,我现在说一个有用的数据库平台的能力:在掌握超过几百个T的数据量,大约十亿的PV每天动态页面,还有几个大的项目是数据接口在PV的调用总数不。(包括一个大项目,领导每天一个数据库查询处理9000万年初以来memcached部署)。我整个数据库服务器平均负载约0.5-1。
一般来说,MyISAM是合适的:
(1)做大量的计数计算;
(2)插入不频繁,查询非常频繁。
(3)没有生意。
InnoDB适合:
(1)高可靠性要求或业务要求;
(2)表更新和查询非常频繁,而数据引擎是由表锁较大的机会创建的。
让所有的灵活性可能的开关是MySQL的扩展,提供ANSI SQL的类型parameter.mysql允许你桌上指定数据库引擎,所以他们有时指表格式。下面的示例代码演示了如何创建一个表,用MyISAM、法和堆发动机,分别注为创建每个表的代码是一样的,这个参数是用来除最后一种类型参数指定数据引擎。
下面提到:
复制代码代码如下所示:
创建表(tblmyisam
我没有空auto_increment int,
主键(id),
value_a tinyint
类型= MyISAM)
创建表(tblisam
我没有空auto_increment int,
主键(id),
value_a tinyint
类型= ISAM)
创建表(tblheap
我没有空auto_increment int,
主键(id),
value_a tinyint
类型=堆)
你也可以使用ALTER TABLE命令将原来的形式从一个主机到另一个。下面的代码显示了如何使用ALTER TABLE将MyISAM表InnoDB引擎:
下面提到:
复制代码代码如下所示:
修改表tblmyisam变化类型= InnoDB
MySQL使用三步来实现这个目标。首先,创建一个表的副本。然后,在任何输入数据中的更改被排队,副本被移动到另一个引擎。最后,队列中的任何数据更改被发送到一个新的表单,并且原始表单被删除。
复制代码代码如下所示:
修改表的快捷方式
如果你只是想从ISAM MyISAM更新表,你可以使用mysql_convert_table_format命令而不是写在表的表达。
您可以使用显示表命令(这是另一个扩展的MySQL的ANSI标准)来确定发动机管理的具体table.show表返回结果集的多个数据列。您可以使用此结果集查询各种信息:数据库引擎的名称在类型字段中:
复制代码代码如下所示:
从tblinnodb表状态
你可以使用显示创建表{是}来检索显示表可以检索信息。
一般来说,MySQL默认情况下会提供多种存储引擎,可以通过以下方式查看:
(1)看看你的MySQL现在提供了什么存储引擎:MySQL显示引擎;
(2)看你的MySQL的默认存储引擎:MySQL >显示变量''%1 storage_engine %;
(3)您需要查看表中使用的引擎(在显示结果中,参数引擎指示表中所使用的当前存储引擎)。
最后,如果你想使用一个引擎没有被编译到MySQL和没有被激活,它是无用的,和MySQL不会提示这个。它只会给你提供一个默认的形式格式(MyISAM)。除了使用默认的格式,有使MySQL给出错误提示方法。但目前,如果不能确定是否有特定的数据库引擎,则需要使用show表检查表格格式。
更多的选择意味着更好的性能。
对特定表的引擎需要重新编译和跟踪。考虑到额外的复杂性,为什么还要使用非默认数据库引擎答案很简单:您需要调整数据库以满足您的需求。
可以肯定的是,MyISAM是真的很快,但是如果你的逻辑设计需要事务处理,你可以使用支持事务处理自由引擎。进一步说,因为MySQL允许您将数据库引擎在桌子上,你只能优化需要事务处理的表,并交不需要事务处理一个更便携的MyISAM引擎的表,MySQL,灵活性是关键。
性能测试
所有的性能测试都在窗口XP SP2 Micrisoft计算机测试,英特尔(R)pentinum(R)M处理器1.6oghz 1G内存。
测试方法:连续提交10个查询,表记录总数:38万,时间单位S
发动机类型myisaminnodb性能差异
计数0.00083573.01633609
0.005708 0.157427.57查询主键
查询非主键24.01 80.37 3.348
更新主键0.008124 0.8183100.7
更新非主键0.004141 0.02625 6.338
插入0.004188 0.369488.21
(1)当索引查询可以加快说,MyISAM:4206.09733次,比InnoDB查询快510.72921倍。同时,MyISAM的更新速度已经下降到原来的1 / 2放缓,和InnoDB的更新速度已经下降到原来的1 / 30.it放缓取决于形势决定是否被索引,如日志表,不质疑,不做任何指数。
(2)如果你的数据量是百万,而且没有事务处理,然后MyISAM是表现最好的选择。
(3)对InnoDB表的尺寸较大,和大量的硬盘空间可以保存MyISAM。
表占用的表在38w表我们测试如下:
发动机型号MyISAM InnoDB
数据53924 KB 58976 KB
索引13640 KB 21072 KB
占总空间67564 KB 80048 KB
另一个176w万记录表,占用的空间表如下:
发动机型号MyIsam InnorDB
数据56166 KB 90736 KB
索引67103 KB 88848 KB
总占地123269 kb179584 KB的空间
其他
MySQL的官方解释:InnoDB提供MySQL InnoDB事务安全(酸兼容)存储引擎提交、回滚和崩溃恢复capability.innodb锁定在排级也提供了一个一致的Oracle风格解锁在SELECT语句读取,这增加了用户部署和性能。没有必要扩大在InnoDB锁,因为一行在InnoDB级锁是一个非常适合于小space.innodb还支持外键强制。在SQL查询中,你可以自由地混合InnoDB类型表与其他MySQL表的类型,甚至在同一查询。
InnoDB是为处理海量数据的最大性能设计。它的CPU效率很可能是其他基于磁盘的关系数据库引擎所无法比拟的。
InnoDB存储引擎与MySQL服务器完全集成,和InnoDB存储引擎维持它自己的缓冲池中的表空间的数据缓存和主memory.innodb索引存储表、索引和表空间可以包含多个文件(或原始磁盘分区),例如是不同的MyISAM表,在MyISAM表每个表是在单独的文件中。InnoDB表可以是任何尺寸,即使文件大小限制为2GB的操作系统。
InnoDB是包含在默认情况下,MySQL的二进制分布。Windows安装程序让InnoDB MySQL的要点在Windows默认的表。
InnoDB用于在大量的大型数据库的网站,需要高性能的产品。著名的互联网新闻网站Slashdot.org,运行在InnoDB。mytrix,公司存储数据超过1TB在InnoDB,和其他一些网站处理800插入/更新每秒InnoDB。