MySQL引擎

MySQL数 据库引擎取决于MySQL在安装的时候是如何被编译的。要添加一个新的引擎,就必须重新编译MYSQL。在缺省情况下,MYSQL支持三个引擎:ISAM、MYISAM和HEAP。另外两种类型INNODB和BERKLEY(BDB),也常常可以使用。如果技术高超,还可以使用MySQL++ API自己做一个引擎。下面介绍几种数据库引擎:

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

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

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

    InnoDB:InnoDB数据库引擎都是造就MySQL灵活性的技术的直接产品,这项技术就是MYSQL++ API。在使用MYSQL的时候,你所面对的每一个挑战几乎都源于ISAM和MyISAM数据库引擎不支持事务处理(transaction process)也不支持外来键。尽管要比ISAM和 MyISAM引擎慢很多,但是InnoDB包括了对事务处理和外来键的支持,这两点都是前两个引擎所没有的。如前所述,如果你的设计需要这些特性中的一者 或者两者,那你就要被迫使用后两个引擎中的一个了。

   MySQL 官方对InnoDB是这样解释的InnoDB给MySQL提供了具有提交、回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读,这些特色增加了多用户部署和性能。没有在InnoDB中扩大锁定的需要,因为在InnoDB中行级锁定适合非常小的空间。InnoDB也支持FOREIGN KEY强制。在SQL查询中,你可以自由地将InnoDB类型的表与其它MySQL的表的类型混合起来,甚至在同一个查询中也可以混合。

    InnoDB是为处理巨大数据量时的最大性能设计,它的CPU效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的。

    InnoDB存储引擎被完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。InnoDB存储它的表&索引在一个表空间中,表空间可以包含数个文件(或原始磁盘分区)。这与MyISAM表不同,比如在MyISAM表中每个表被存在分离的文件中。InnoDB 表可以是任何尺寸,即使在文件尺寸被限制为2GB的操作系统上。

    InnoDB默认地被包含在MySQL二进制分发中。Windows Essentials installer使InnoDB成为Windows上MySQL的默认表。

    InnoDB被用来在众多需要高性能的大型数据库站点上产生。著名的Internet新闻站点Slashdot.org运行在InnoDB上。 Mytrix, Inc.在InnoDB上存储超过1TB的数据,还有一些其它站点在InnoDB上处理平均每秒800次插入/更新的


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

    一般情况下,MySQL会默认提供多种存储引擎,可以通过下面的查看:

    (1)看你的MySQL现在已提供什么存储引擎: mysql>show engines;

    (2)看你的MySQL当前默认的存储引擎: mysql>show variables like '%storage_engine%';

    (3)你要看某个表用了什么引擎(在显示结果里参数engine后面的就表示该表当前用的存储引擎): mysql>show create table 表名;


    所有的性能测试在:Micrisoft window xp sp2 , Intel(R) Pentinum(R) M processor 1.6oGHz 1G 内存的电脑上测试。

    测试方法:连续提交10个query, 表记录总数:38万 , 时间单位 s

        引擎类型                    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是性能最好的选择。

    (3)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               InnorDB
            数据                   56,166 KB           90,736 KB
            索引                   67,103 KB           88,848 KB
            占用总空间        123,269 KB         179,584 KB

 

转自:http://www.cnblogs.com/sopc-mc/archive/2011/11/01/2232212.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MySQL 数据库管理系统支持多种数据库引擎。每种数据库引擎都有不同的特点,适用于不同的用例。 常见的 MySQL 数据库引擎包括: - MyISAM:MyISAM 是 MySQL 的默认引擎,在性能和数据完整性方面表现良好。它支持全文索引,但不支持事务和行级锁定。 - InnoDB:InnoDB 是一种支持事务处理和行级锁定的引擎。它通常被用于需要高可用性和数据完整性的应用程序。 - Memory:Memory 引擎将数据存储在内存中,速度非常快,但数据不能持久化。它通常用于临时存储数据或缓存数据。 - CSV:CSV 引擎允许将数据存储在 CSV 格式的文件中,并提供对 CSV 文件的简单查询支持。 - Archive:Archive 引擎提供了一种高压缩比的方式来存储大量只读数据。它不支持索引,因此只能用于存储历史数据或进行批量加载。 在选择 MySQL 数据库引擎时,应考虑应用程序的性能、可用性、数据完整性以及其他特定需求,并根据这些因素来决定最后使用哪 ### 回答2: MySQL引擎是用于存储和管理数据库数据的关键组件。MySQL提供了多种不同的引擎,每个引擎都具有其独特的特点和优势。下面是一些常见的MySQL引擎及其区别: 1. MyISAM引擎:这是MySQL最早的引擎,它使用表级锁定机制,适用于读取频率高于写入频率的场景。但是,它不支持事务处理和数据完整性的约束,因此在需要ACID事务支持的应用中不适用。 2. InnoDB引擎:这是MySQL默认的事务性存储引擎,它支持ACID事务、行级锁定和外键约束等重要特性。它适用于需要高可靠性和数据完整性的应用。InnoDB引擎通过自动将数据缓存到内存中来提高性能,并具有崩溃恢复功能,可以在数据库崩溃后恢复数据。 3. Memory引擎:也称为Heap引擎,它将表中的数据存储在内存中,因此读取速度非常快。然而,由于数据存储在内存中,所以在数据库崩溃时数据会丢失。Memory引擎适用于临时数据、缓存和临时表等应用场景。 4. NDB Cluster引擎:也称为MySQL Cluster引擎,它通过将数据分布在多个节点上来提供高可用性和性能。NDB Cluster引擎适合于需要高并发访问和高可用性的大规模应用,如电信、金融和电子商务等领域。 5. Archive引擎:这是一种非事务性存储引擎,适用于归档和大量读取少量写入的应用。它以高度压缩的方式存储数据,节省了存储空间。Archive引擎不支持索引,只能进行全表扫描操作。 根据应用的需求和特点,选择合适的MySQL引擎可以提供更好的性能、可用性和数据完整性。 ### 回答3: MySQL是一种关系型数据库管理系统,它有多个可用的引擎来处理和存储数据。在MySQL中,常用的引擎包括InnoDB、MyISAM、MEMORY、CSV等。 首先,InnoDB是MySQL的默认引擎,并且在性能和功能上提供了许多优势。它支持事务处理、行级锁和外键约束等特性,适合于需要高并发读写的应用。InnoDB还提供了自动崩溃恢复机制,可以在数据库发生崩溃时保证数据的一致性。 其次,MyISAM是另一个常用的引擎,适用于一些读取频率高但写入频率较低的应用。它的优点是速度快,支持全文索引和空间索引,但不支持事务和行级锁定,也不具备自动崩溃恢复的功能。 另外,MEMORY引擎适用于数据量较小的表,将数据存储在内存中,读写速度非常快。然而,一旦MySQL服务器关闭,数据将丢失,不具备持久性。 此外,CSV引擎用于处理以逗号分隔的值(CSV)文件,它允许将CSV文件视为表,并进行查询和修改。但是,与其他引擎相比,CSV引擎的功能相对有限。 总之,不同的引擎适用于不同的应用场景。选择适合的引擎可以提高数据库的性能和效率,并满足应用的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值