介绍一下Mysql的存储引擎_第1页
介绍一下Mysql的存储引擎_第2页
介绍一下Mysql的存储引擎_第3页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

介绍一下Mysql的存储引擎

存储引擎是什么?

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

例如,假如你在讨论大量的临时数据,你或许需要使用内存存储引擎。内存存储引擎能够在内存中存储全部的表格数据。又或者,你或许需要一个支持事务处理的数据库(以确保事务处理不胜利时数据的回退力量)。

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

选择如何存储和检索你的数据的这种敏捷性是MySQL为什么如此受欢迎的主要原因。其它数据库系统(包括大多数商业选择)仅支持一种类型的数据存储。圆满的是,其它类型的数据库解决方案实行的“一个尺码满意一切需求”的方式意味着你要么就牺牲一些性能,要么你就用几个小时甚至几天的时间具体调整你的数据库。使用MySQL,我们仅需要修改我们使用的存储引擎就可以了。

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

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

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

mysql>showengines;

++++

|Engine|Support|Comment|

++++

|MyISAM|DEFAULT|DefaultengineasofMySQL3.23withgreatperformance|

|HEAP|YES|AliasforMEMORY|

|MEMORY|YES|Hashbased,storedinmemory,usefulfortemporarytables|

|MERGE|YES|CollectionofidenticalMyISAMtables|

|MRG_MYISAM|YES|AliasforMERGE|

|ISAM|NO|Obsoletestorageengine,nowreplacedbyMyISAM|

|MRG_ISAM|NO|Obsoletestorageengine,nowreplacedbyMERGE|

|InnoDB|YES|Supportstransactions,row-levellocking,andforeignkeys|

|INNOBASE|YES|AliasforINNODB|

|BDB|NO|Supportstransactionsandlevellocking|

|BERKELEYDB|NO|AliasforBDB|

|NDBCLUSTER|NO|Clustered,fault-tolerant,memory-basedtables|

|NDB|NO|AliasforNDBCLUSTER|

|EXAMPLE|NO|Examplestorageengine|

|ARCHIVE|NO|Archivestorageengine|

|CSV|NO|CSVstorageengine|

++++

16rowsinset(0.01sec)这个表格显示了可用的数据库引擎的全部名单以及在当前的数据库服务器中是否支持这些引擎。

对于MySQL4.1.2以前版本,可以使用mysql>showvariableslike“have_%”(显示类似“have_%”的变量):

mysql>showvariableslike"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|

+++

8rowsinset(0.01sec)

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

使用一个指定的存储引擎

你可以使用许多方法指定一个要使用的存储引擎。最简洁的方法是,假如你喜爱一种能满足你的大多数数据库需求的存储引擎,你可以在MySQL设置文件中设置一个默认的引擎类型(使用storage_engine选项)或者在启动数据库服务器时在命令行后面加上–default-storage-engine或–default-table-type选项。

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

CREATETABLEmytable(idint,titlechar(20))ENGINE=INNODB

你还可以转变现有的表使用的存储引擎,用以下语句:

ALTERTABLEmytableENGINE=MyISAM

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

各存储引擎之间的区分

为了做出选择哪一个存储引擎的打算,我们首先需要考虑每一个存储引擎供应了哪些不同的核心功能。这种功能使我们能够把不同的存储引擎区分开来。我们一般把这些核心功能分为四类:支持的字段和数据类型、锁定类型、索引和处理。一些引擎具有能过促使你做出打算的独特的功能,我们一会儿再认真讨论这些详细问题。

字段和数据类型

虽然全部这些引擎都支持通用的数据类型,例如整型、实型和字符型等,但是,并不是全部的引擎都支持其它的字段类型,特殊是BLOG(二进制大对象)或者TEXT文本类型。其它引擎或许仅支持有限的字符宽度和数据大小。

这些局限性可能直接影响到你可以存储的数据,同时也可能会对你实施的搜寻的类型或者你对那些信息创建的索引产生间接的影响。这些区分能够影响你的应用程序的性能和功能,由于你必需要依据你要存储的数据类型选择对需要的存储引擎的功能做出决策。

锁定

数据库引擎中的锁定功能打算了如何管理信息的访问和更新。当数据库中的一个对象为信息更新锁定了,在更新完成之前,其它处理不能修改这个数据(在某些状况下还不允许读这种数据)。

锁定不仅影响很多不同的应用程序如何更新数据库中的信息,而且还影响对那个数据的查询。这是由于查询可能要访问正在被修改或者更新的数据。总的来说,这种延迟是很小的。大多数锁定机制主要是为了防止多个处理更新同一个数据。由于向数据中插入信息和更新信息这两种状况都需要锁定,你可以想象,多个应用程序使用同一个数据库可能会有很大的影响。

不同的存储引擎在不同的对象级别支持锁定,而且这些级别将影响可以同时访问的信息。得到支持的级别有三种:表锁定、块锁定和行锁定。支持最多的是表锁定,这种锁定是在MyISAM中供应的。在数据更新时,它锁定了整个表。这就防止了很多应用程序同时更新一个详细的表。这对应用许多的多用户数据库有很大的影响,由于它延迟了更新的过程。

页级锁定使用BerkeleyDB引擎,并且依据上载的信息页(8KB)锁定数据。当在数据库的许多地方进行更新的时候,这种锁定不会消失什么问题。但是,由于增加几行信息就要锁定数据结构的最终8KB,当需要增加大量的行,也别是大量的小型数据,就会带来问题。

行级锁定供应了最佳的并行访问功能,一个表中只有一行数据被锁定。这就意味着许多应用程序能够更新同一个表中的不同行的数据,而不会引起锁定的问题。只有InnoDB存储引擎支持行级锁定。

建立索引

建立索引在搜寻和恢复数据库中的数据的时候能够显著提高性能。不同的存储引擎供应不同的制作索引的技术。有些技术或许会更适合你存储的数据类型。

有些存储引擎根本就不支持索引,其缘由可能是它们使用基本表索引(如MERGE引擎)或者是由于数据存储的方式不允许索引(例如FEDERATED或者BLACKHOLE引擎)。

事务处理

事务处理功能通过供应在向表中更新和插入信息期间的牢靠性。这种

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论