其他存储引擎

1)MERGE

 

  MERGE引擎类型允许你把许多结构相同的表合并为一个表。然后可以执行查询,从多个表返回的结果就像从一个表返回的结果一样。每一个合并的表必须有同样的表定义。

MERGE存储引擎在下面这种使用场合会最为有用,如果需要把日志纪录不停的录入MySQL数据库,并且每天、每周或者每个月都创建一个单一的表,而且要制作来自多个表的合计查询,MERGE表这时会非常有效。然而,这项功能有局限性。只能合并MyISAM表而且必须严格遵守相同的表定义的限制。虽然这看起来好像是一个大问题,但是,如果使用另外一种表类型(例如InnoDB),这种合并可能就不需要了。

 

2)MEMORY

   MEMORY(内存)存储引擎(以前称作HEAP存储引擎)在内存中存储全部数据。一旦MySQL服务器关闭,存储在内存中的任何信息都将丢失。然而,单个表的格式将保留,使你能够创建一个用于存储信息的临时表。这样,每次数据库服务器启动时,你不需要重新创新这个表就可以快速地访问信息。

  长期使用MEMORY存储引擎一般来说不是一个好主意,因为数据很容易丢失。然而,如果你有足够的内存,使用基于MEMORY的表在大型数据集中执行复杂的查询是一种非常有效的方法,它能够很大程度的提高性能。

使用MEMORY表的最佳方法是使用一个“select”语句从你原来的基于磁盘的表中选择一个大型的数据集,然后对你需要的具体部分进一步分析那些信息。我过去曾经使用这个技术提取了一个月的网络记录数据,实际上就是从使用ARCHIVE存储引擎制作的表中提取的数据,然后对具体的URL、网站和其它重点进行查询。

 

 

3) EXAMPLE

 

       EXAMPLE引擎实际上是一个存储引擎编程的例子,能够用作MySQL系统中其它引擎的基础。EXAMPLE不支持数据插入,对于任何形式的数据库访问来说也不是一个实用的引擎。然而,EXAMPLE是一个很好的指南,指导你如何开发自己的存储引擎,因此对于程序员来说是一个有效的引擎。

 

4)BDB

BDB表可能有一个更大的崩溃幸存机会,并且也具有对事务COMMIT和ROLLBACK操作的能力,BDB引擎支持页级锁定。

 5)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次插入/更新的负荷。

 

给出一个事物控制的例子:

 

mysql> CREATE TABLE CUSTOMER (A INT, B CHAR (20), INDEX (A)) ENGINE=InnoDB;

Query OK, 0 rows affected (0.30 sec)

 

mysql> BEGIN;

Query OK, 0 rows affected (0.00 sec)

 

mysql> INSERT INTO CUSTOMER VALUES (10, 'Heikki');

Query OK, 1 row affected (0.00 sec)

 

mysql> COMMIT;

Query OK, 0 rows affected (0.03 sec)

 

mysql> SET AUTOCOMMIT=0;

Query OK, 0 rows affected (0.00 sec)

 

mysql> INSERT INTO CUSTOMER VALUES (15, 'John');

Query OK, 1 row affected (0.00 sec)

 

mysql> ROLLBACK;

Query OK, 0 rows affected (0.06 sec)

 

mysql> SELECT * FROM CUSTOMER;

+------+--------+

| A    | B      |

+------+--------+

|   10 | Heikki |

+------+--------+

1 row in set (0.00 sec)

 

InnoDB存储引擎相关的内容非常复杂涉及到事物处理、日志、备份和恢复、锁定、多版本、性能、表和索引的结构、磁盘IO等很多方面的知识,我们将在以后用一章的篇幅单独介绍InnDB表。

 

mysql> insert into TEST_ISAM values(10001,'test');
Query OK, 1 row affected (0.01 sec)

mysql> ROLLBACK;
Query OK, 0 rows affected (0.00 sec)

mysql> show create table TEST_ISAM;
+-----------+------------------------------------------------------------------------------------------------------------------------------+
| Table     | Create Table                                                                                                                 |
+-----------+------------------------------------------------------------------------------------------------------------------------------+
| TEST_ISAM | CREATE TABLE `TEST_ISAM` (
  `ID` int(11) DEFAULT NULL,
  `MC` varchar(60) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
+-----------+------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

mysql>

注:从这个实例可以看出 MyISAM没有回滚的功能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值