五花八门的MySQL存储引擎,哪一盘是你的菜?

一.MYSQL中存储引擎分类及应用场合

  MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE。

  MySQL支持数个存储引擎作为对不同表的类型的处理器。MySQL存储引擎包括处理事务安全表的引擎和处理非事务安全表的引擎:

1.MyISAM管理非事务表

  它提供高速存储和检索,以及全文搜索能力。MyISAM在所有MySQL配置里被支持,它是默认的存储引擎,除非你配置MySQL默认使用另外一个引擎。5.5.5版本之前的MySQL是使用MyISAM作为默认的存储引擎的;

  MyISAM存储引擎有较高的插入,查询速度(全文索引),但不支持事务 �C>突出优点检索快   

每个MyISAM 表在磁盘上存储成三个文件

.frm(元数据,表结构的定义) 

.MYD(数据)

.MYI(索引)

直接复制三个文件就可以移植表到其他mysql上

2.MEMORY存储引擎

  提供“内存中”表。MERGE存储引擎允许集合将被处理同样的MyISAM表作为一个单独的表。就像MyISAM一样,MEMORY和MERGE存储引擎处理非事务表,这两个引擎也都被默认包含在MySQL中。

  注释:MEMORY存储引擎正式地被确定为HEAP引擎。

  MEMORY存储引擎中所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。它的表格中包含.frm数据

.frm(元数据,表结构的定义,数据)  

3.InnoDB和BDB存储引擎提供事务安全表

  BDB被包含在为支持它的操作系统发布的MySQL-Max二进制分发版里。InnoDB也默认被包括在所 有MySQL 5.1二进制分发版里,你可以按照喜好通过配置MySQL来允许或禁止任一引擎。从5.5.5版本开始,MySQL使用InnoDB作为默认的存储引擎。

InnoDB存储引擎是事务型数据库的首选引擎,支持行级锁、外键、MVCC多版本并发机制�C>突出优点支持事务,每一个NnnoDB表都包括下面内容  

.frm(元数据,表结构的定义)

.ibd(存储表结构和数据)

4.EXAMPLE存储引擎

  这是一个“存根”引擎,它不做什么。你可以用这个引擎创建表,但没有数据被存储于其中或从其中检索。这个引擎的目的是服务,在 MySQL源代码中的一个例子,它演示说明如何开始编写新存储引擎。同样,它的主要兴趣是对开发者。

  下面的存储引擎应用不如上面广泛,仅作介绍。

5.BLACKHOLE存储引擎

  接受但不存储数据,并且检索总是返回一个空集。

6.NDB Cluster存储引擎

  是被MySQL Cluster用来实现分割到多台计算机上的表的存储引擎。它在MySQL-Max 5.1二进制分发版里提供。这个存储引擎当前只被Linux, Solaris, 和Mac OS X 支持。在未来的MySQL分发版中,我们想要添加其它平台对这个引擎的支持,包括Windows。

7.ARCHIVE存储引擎

  被用来无索引地,非常小地覆盖存储的大量数据。

8.CSV存储引擎

  把数据以逗号分隔的格式存储在文本文件中。

9.FEDERATED存储引擎

  把数据存在远程数据库中。在MySQL 5.1中,它只和MySQL一起工作,使用MySQL C Client API。在未来的分发版中,我们想要让它使用其它驱动器或客户端连接方法连接到另外的数据源。


二.如何指定存储引擎

当你创建一个新表的时候,你可以通过添加一个ENGINE 或TYPE 选项到CREATE TABLE语句来告诉MySQL你要创建什么类型的表:

CREATE TABLE t (i INT) ENGINE = INNODB;

CREATE TABLE t (i INT) TYPE = MEMORY;

虽然TYPE仍然在MySQL 5.1中被支持,现在ENGINE是首选的术语。


三.相关的查询指令

3.1 查询安装的mysql,支持哪些存储引擎,和当前默认存储引擎是什么

mysql命令行模式下执行

> show engines;     

+――――+―――+

| Engine     | Support |

+――――+―――+

| MyISAM       | DEFAULT |

| InnoDB         | YES     |

| BLACKHOLE  | YES     |

| CSV               | YES    |

| MEMORY      | YES     |

| FEDERATED   | NO     |

| ARCHIVE       | YES     |

| MRG_MYISAM | YES  |

+――――+―――+


3.2 查看一个表的存储引擎是什么 

> show create table user;      显示user创建语句及使用的引擎

> show table status 【from db_name】 where name='user';   显示user表当前状态及使用引擎

> show table status  like '%user%';  


3.3 修改一个表的存储引擎 

下面的命令是将user这个表的存储引擎修改为InnoDB

>alter table user engine='InnoDB';


3.4 修改默认存储引擎

例如将默认存储引擎修改成InnoDB, 编辑mysql的配置文件,添加如下参数:

# vi /etc/my.cnf

default-storage-engine=InnoDB

# service mysqld restart 

重启mysql服务使修改生效


四.如何选择最适合你的存储引擎?

下述存储引擎是最常用的

& MyISAM:默认的MySQL插件式存储引擎,它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。注意,通过更改STORAGE_ENGINE配置变量,能够方便地更改MySQL服务器的默认存储引擎。

& InnoDB:用于事务处理应用程序,具有众多特性,包括ACID事务支持。

& BDB:可替代InnoDB的事务引擎,支持COMMIT、ROLLBACK和其他事务特性。

& Memory:将所有数据保存在RAM中,在需要快速查找引用和其他类似数据的环境下,可提供极快的访问。

& Merge:允许MySQL DBA或开发人员将一系列等同的MyISAM表以逻辑方式组合在一起,并作为1个对象引用它们。对于诸如数据仓储等VLDB环境十分适合。

& Archive:为大量很少引用的历史、归档、或安全审计信息的存储和检索提供了完美的解决方案。

& Federated:能够将多个分离的MySQL服务器链接起来,从多个物理服务器创建一个逻辑数据库。十分适合于分布式环境或数据集市环境。

& Cluster/NDB:MySQL的簇式数据库引擎,尤其适合于具有高性能查找要求的应用程序,这类查找需求还要求具有最高的正常工作时间和可用性。

& Other:其他存储引擎包括CSV(引用由逗号隔开的用作数据库表的文件),Blackhole(用于临时禁止对数据库的应用程序输入),以及Example引擎(可为快速创建定制的插件式存储引擎提供帮助)。

  请记住,对于整个服务器或方案,你并不一定要使用相同的存储引擎,你可以为方案中的每个表使用不同的存储引擎,这点很重要。



@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  IT技术服务联盟致力于分享IT行业经典技术文章,运维知识智慧总结,企业信息网建设方案,企业级混合云私有云解决方案定制等。

  欢迎关注公众号“IT技术服务联盟”,关注公众号,获取笔者十年技术精华汇集资料多达2T,先到先得!

wKioL1Xm1ZOhCGafAABgc0oHa9o146.jpg

           @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@


你可能感兴趣的:(oracle,mysql,数据库,数据库搜索引擎)