MySQL数据库存储引擎详解

2008-02-23 07:43:28来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

存储引擎是什么?

MySQL中的数据用各种不同的技术存储在文档(或内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,您能够获得额外的速度或功能,从而改善您的应用的整体功能。

例如,假如您在研究大量的临时数据,您也许需要使用内存存储引擎。内存存储引擎能够在内存中存储任何的表格数据。又或,您也许需要一个支持事务处理的数据库(以确保事务处理不成功时数据的回退能力)。

这些不同的技术连同配套的相关功能在MySQL中被称作存储引擎(也称作表类型)。MySQL默认配置了许多不同的存储引擎,能够预先配置或在MySQL服务器中启用。您能够选择适用于服务器、数据库和表格的存储引擎,以便在选择如何存储您的信息、如何检索这些信息连同您需要您的数据结合什么性能和功能的时候为您提供最大的灵活性。

选择如何存储和检索您的数据的这种灵活性是MySQL为什么如此受欢迎的主要原因。其他数据库系统(包括大多数商业选择)仅支持一种类型的数据存储。遗憾的是,其他类型的数据库解决方案采取的“一个尺码满足一切需求”的方式意味着您要么就牺牲一些性能,要么您就用几个小时甚至几天的时间周详调整您的数据库。使用MySQL,我们仅需要修改我们使用的存储引擎就能够了。

在这篇文章中,我们不准备集中讨论不同的存储引擎的技术方面的问题(尽管我们不可避免地要研究这些因素的某些方面),相反,我们将集中介绍这些不同的引擎分别最适应哪种需求和如何启用不同的存储引擎。为了实现这个目的,在介绍每一个存储引擎的具体情况之前,我们必须要了解一些基本的问题。

如何确定有哪些存储引擎可用

您能够在MySQL(假设是MySQL服务器4.1.2以上版本)中使用显示引擎的命令得到一个可用引擎的列表。

mysql> show engines;

 ------------ --------- ------------------------------------------------------------ 

| Engine     | Support | Comment                                                    |

 ------------ --------- ------------------------------------------------------------ 

| MyISAM     | DEFAULT | Default engine as of MySQL 3.23 with great performance     |

| HEAP       | YES     | Alias for MEMORY                                           |

| MEMORY     | YES     | Hash based, stored in memory, useful for temporary tables  |

| MERGE      | YES     | Collection of identical MyISAM tables                      |

| MRG_MYISAM | YES     | Alias for MERGE                                            |

| ISAM       | NO      | Obsolete storage engine, now replaced by MyISAM            |

| MRG_ISAM   | NO      | Obsolete storage engine, now replaced by MERGE             |

| InnoDB     | YES     | Supports transactions, row-level locking, and foreign keys |

| INNOBASE   | YES     | Alias for INNODB                                           |

| BDB        | NO      | Supports transactions and page-level locking               |

| BERKELEYDB | NO      | Alias for BDB                                              |

| NDBCLUSTER | NO      | Clustered, fault-tolerant, memory-based tables             |

| NDB        | NO      | Alias for NDBCLUSTER                                       |

| EXAMPLE    | NO      | Example storage engine                                     |

| ARCHIVE    | NO      | Archive storage engine                                     |

| CSV        | NO      | CSV storage engine                                         |

 ------------ --------- ------------------------------------------------------------ 

16 rows in set (0.01 sec)

这个表格显示了可用的数据库引擎的全部名单连同在当前的数据库服务器中是否支持这些引擎。

对于MySQL 4.1.2以前版本,能够使用mysql> show variables like "have_%"(显示类似“have_%”的变量):

mysql> show variables like "have_%"; 

 ------------------ ----------  

| Variable_name    | Value    | 

 ------------------ ----------  

| have_bdb         | YES      | 

| have_crypt       | YES      | 

| have_innodb      | DISABLED | 

| have_isam        | YES      | 

| have_raid        | YES      | 

| have_symlink     | YES      | 

| have_openssl     | YES      | 

| have_query_cache | YES      | 

 ------------------ ----------  

8 rows in set (0.01 sec) 

您能够通过修改配置脚本中的选项来配置在MySQL安装软件中可用的引擎。假如您在使用一个预先包装好的MySQL二进制发布版软件,那么,这个软件就包含了常用的引擎。然而,需要指出的是,假如您要使用某些不常用的引擎,特别是CSV、RCHIVE(存档)和BLACKHOLE(黑洞)引擎,您就需要手工重新编译MySQL源码 。

使用一个指定的存储引擎

您能够使用很多方法指定一个要使用的存储引擎。最简单的方法是,假如您喜欢一种能满足您的大多数数据库需求的存储引擎,您能够在MySQL配置文档中配置一个默认的引擎类型(使用storage_engine 选项)或在启动数据库服务器时在命令行后面加上--default-storage -engine或--default-table-type选项 。

更灵活的方式是在随MySQL服务器发布同时提供的MySQL客户端时指定使用的存储引擎。最直接的方式是在创建表时指定存储引擎的类型,向下面这样:

CREATE TABLE mytable (id int, title char(20)) ENGINE = INNODB

您还能够改变现有的表使用的存储引擎,用以下语句:

ALTER TABLE mytable ENGINE = MyISAM

然而,您在以这种方式修改表格类型的时候需要很仔细,因为对不支持同样的索引、字段类型或表大小的一个类型进行修改可能使您丢失数据。假如您指定一个在您的当前的数据库中不存在的一个存储引擎,那么就会创建一个MyISAM(默认的)类型的表。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: MySQL修改密码方法总结

下一篇: 使用MySql