MySQL数据库存储引擎详解[MySQL防范]
本文“MySQL数据库存储引擎详解[MySQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
存储引擎是什么?
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(默许的)范例的表.
各存储引擎之间的辨别
为了做出挑选哪一个存储引擎的决意,我们首先需求考虑每一个存储引擎供应了哪些差别的核心功效.这种功效使我们可以把差别的存储引擎辨别开来.我们普通把这些核心功效分为四类:支持的字段和数据范例、锁定范例、索引和处理.一些引擎具有能过促使你做出决意的独特的功效,我们一会儿再细心研究这些具体问题.
字段和数据范例
固然全部这些引擎都支持通用的数据范例,比方整型、实型和字符型等,但是,并非全部的引擎都支持别的的字段范例,分外是BLOG(二进制大对象)大概TEXT文本范例.别的引擎大概仅支持有限的字符宽度和数据大小.
这些范围性大概直接影响到你可以存储的数据,同时也大概会对你实施的搜索的范例大概你对那些信息成立的索引产生间接的影响.这些辨别可以影响你的利用程序的性能和功效,因为你必必要按照你要存储的数据范例挑选对需求的存储引擎的功效做出抉择.
锁定
数据库引擎中的锁定功效决意了若何管理信息的拜候和更新.当数据库中的一个对象为信息更新锁定了,在更新完成之前,别的处理不能改正这个数据(在某些情形下还不答应读这种数据).
锁定不但影响很多差别的利用程序若何更新数据库中的信息,并且还影响对那个数据的查询.这是因为查询大概要拜候正在被改正大概更新的数据.总的来说,这种耽误是很小的.大大都锁定机制主如果为了避免多个处理更新同一个数据.由于向数据中插入信息和更新信息这两种情形都需求锁定,你可以想象,多个利用程序利用同一个数据库大概会有很大的影响.
差别的存储引擎在差别的对象级别支持锁定,并且这些级别将影响可以同时拜候的信息.得到支持的级别有三种:表锁定、块锁定和行锁定.支持最多的是表锁定,这种锁定是在MyISAM中供应的.在数据更新时,它锁定了整个表.这就避免了很多利用程序同时更新一个具体的表.这对利用很多的多用户数据库有很大的影响,因为它耽误了更新的历程.
页级锁定利用Berkeley DB引擎,并且按照上载的信息页(8KB)锁定数据.当在数据库的很多地方举行更新的时刻,这种锁定不会呈现什么问题.但是,由于增添几行信息就要锁定数据构造的最后8KB,当需求增添大量的行,也别是大量的小型数据,就会带来问题.
行级锁定供应了最佳的并行拜候功效,一个表中只有一行数据被锁定.这就意味着很多利用程序可以更新同一个表中的差别行的数据,而不会惹起锁定的问题.只有InnoDB存储引擎支持行级锁定.
成立索引
成立索引在搜索和恢复数据库中的数据的时刻可以明显提高性能.差别的存储引擎供应差别的制作索引的技术.有些技术大概会更合适你存储的数据范例.
有些存储引擎根本就不支持索引,其缘由大概是它们利用基本表索引(如MERGE引擎)大概是因为数据存储的方法不答应索引(比方FEDERATED大概BLACKHOLE引擎).
事件处理
事件处理功效通过供应在向表中更新和插入信息期间的坚固性.这种坚固性是通过以下办法实现的,它答应你更新表中的数据,但仅当利用的利用程序的全部相关操作完好完成后才承受你对表的更改.比方,在会计处理中每一笔会计分录处理将包含对借方科目和贷方科目数据的更改,你需求要利用事件处理功效保证对借方科目和贷方科目的数据更改都顺利完成,才承受所做的改正.假如任一项操作失利了,你都可以撤消这个事件处理,这些改正就不存在了.假如这个事件处理历程完成了,我们可以通过答应这个改正来确认这个操作.
至此为止,我们介绍了MySQL存储引擎的相关基本概念.
以上是“MySQL数据库存储引擎详解[MySQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:本文地址: | 与您的QQ/BBS好友分享! |