innodb的优点和myisam的区别

Mysql存储引擎InnoDB和Myisam的六大区别_MySQL_ThinkSAAS
Mysql存储引擎InnoDB和Myisam的六大区别
Mysql存储引擎InnoDB和Myisam的六大区别
内容来源: 网络
MyISAM
InnoDB
构成上的区别:
每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。
.frm文件存储表定义。
数据文件的扩展名为.MYD (MYData)。
索引文件的扩展名是.MYI (MYIndex)。
基于磁盘的资源是InnoDB表空间数据文件和它的日志文件,InnoDB 表的大小只受限于操作系统文件的大小,一般为 2GB
事务处理上方面:
MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持
InnoDB提供事务支持事务,外部键等高级数据库功能
UPDATE,INSERT,Delete操作
如果执行大量的SELECT,MyISAM是更好的选择
1.如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表
FROM table时,InnoDB不会重新建立表,而是一行一行的删除。
TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用
对AUTO_INCREMENT的操作
每表一个AUTO_INCREMEN列的内部处理。
MyISAM为INSERT和UPDATE操作自动更新这一列。这使得AUTO_INCREMENT列更快(至少10%)。在序列顶的值被删除之后就不能再利用。(当AUTO_INCREMENT列被定义为多列索引的最后一列,可以出现重使用从序列顶部删除的值的情况)。
AUTO_INCREMENT值可用ALTER TABLE或myisamch来重置
对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引
更好和更快的auto_increment处理
如果你为一个表指定AUTO_INCREMENT列,在数据词典里的InnoDB表句柄包含一个名为自动增长计数器的计数器,它被用在为该列赋新值。
自动增长计数器仅被存储在主内存中,而不是存在磁盘上
关于该计算器的算法实现,请参考
AUTO_INCREMENT列在InnoDB里如何工作
表的具体行数
select count(*) from table,MyISAM只要简单的读出保存好的行数,注意的是,当count(*)语句包含
where条件时,两种表的操作是一样的
InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行
提供行锁(locking on row level),提供与 Oracle 类型一致的不加锁读取(non-locking read in
SELECTs),另外,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%”
PHP开发框架
开发工具/编程工具
服务器环境MySQL存储引擎中的MyISAM和InnoDB区别详解
投稿:junjie
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了MySQL存储引擎中的MyISAM和InnoDB区别详解,本文总结了MyISAM与InnoDB的11点区别,需要的朋友可以参考下
在使用MySQL的过程中对MyISAM和InnoDB这两个概念存在了些疑问,到底两者引擎有何分别一直是存在我心中的疑问。为了解开这个谜题,搜寻了网络,找到了如下信息:
MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良。虽然性能极佳,但却有一个缺点:不支持事务处理(transaction)。不过,在这几年的发展下,MySQL也导入了InnoDB(另一种数据库引擎),以强化参考完整性与并发违规处理机制,后来就逐渐取代MyISAM。
InnoDB,是MySQL的数据库引擎之一,为MySQL AB发布binary的标准之一。InnoDB由Innobase Oy公司所开发,2006年五月时由甲骨文公司并购。与传统的ISAM与MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事务(Transaction)功能,类似于PostgreSQL。目前InnoDB采用双轨制授权,一是GPL授权,另一是专有软件授权。
MyISAM与InnoDB的区别是什么?
1、 存储结构
MyISAM:每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存储表定义。数据文件的扩展名为.MYD (MYData)。索引文件的扩展名是.MYI (MYIndex)。
InnoDB:所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),InnoDB表的大小只受限于操作系统文件的大小,一般为2GB。
2、 存储空间
MyISAM:可被压缩,存储空间较小。支持三种不同的存储格式:静态表(默认,但是注意数据末尾不能有空格,会被去掉)、动态表、压缩表。
InnoDB:需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。
3、 可移植性、备份及恢复
MyISAM:数据是以文件的形式存储,所以在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行操作。
InnoDB:免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump,在数据量达到几十G的时候就相对痛苦了。
4、 事务支持
MyISAM:强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快,但是不提供事务支持。
InnoDB:提供事务支持事务,外部键等高级数据库功能。 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。
5、 AUTO_INCREMENT
MyISAM:可以和其他字段一起建立联合索引。引擎的自动增长列必须是索引,如果是组合索引,自动增长可以不是第一列,他可以根据前面几列进行排序后递增。
InnoDB:InnoDB中必须包含只有该字段的索引。引擎的自动增长列必须是索引,如果是组合索引也必须是组合索引的第一列。
6、 表锁差异
MyISAM:只支持表级锁,用户在操作myisam表时,select,update,delete,insert语句都会给表自动加锁,如果加锁以后的表满足insert并发的情况下,可以在表的尾部插入新的数据。
InnoDB:支持事务和行级锁,是innodb的最大特色。行锁大幅度提高了多用户并发操作的新能。但是InnoDB的行锁,只是在WHERE的主键是有效的,非主键的WHERE都会锁全表的。
7、 全文索引
MyISAM:支持 FULLTEXT类型的全文索引
InnoDB:不支持FULLTEXT类型的全文索引,但是innodb可以使用sphinx插件支持全文索引,并且效果更好。
8、 表主键
MyISAM:允许没有任何索引和主键的表存在,索引都是保存行的地址。
InnoDB:如果没有设定主键或者非空唯一索引,就会自动生成一个6字节的主键(用户不可见),数据是主索引的一部分,附加索引保存的是主索引的值。
9、 表的具体行数
MyISAM:保存有表的总行数,如果select count(*)会直接取出出该值。
InnoDB:没有保存表的总行数,如果使用select count(*) from table;就会遍历整个表,消耗相当大,但是在加了wehre条件后,myisam和innodb处理的方式都一样。
10、 CURD操作
MyISAM:如果执行大量的SELECT,MyISAM是更好的选择。
InnoDB:如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。DELETE 从性能上InnoDB更优,但DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除,在innodb上如果要清空保存有大量数据的表,最好使用truncate table这个命令。
MyISAM:不支持
InnoDB:支持
通过上述的分析,基本上可以考虑使用InnoDB来替代MyISAM引擎了,原因是InnoDB自身很多良好的特点,比如事务支持、存储 过程、视图、行级锁定等等,在并发很多的情况下,相信InnoDB的表现肯定要比MyISAM强很多。另外,任何一种表都不是万能的,只用恰当的针对业务类型来选择合适的表类型,才能最大的发挥MySQL的性能优势。如果不是很复杂的Web应用,非关键应用,还是可以继续考虑MyISAM的,这个具体情况可以自己斟酌。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具Posts - 17,
Articles - 0,
Comments - 0
22:52 by 瞬间永恒成功, ... 阅读,
MySQL默认采用的是MyISAM。
MyISAM不支持事务,而InnoDB支持。InnoDB的AUTOCOMMIT默认是打开的,即每条SQL语句会默认被封装成一个事务,自动提交,这样会影响速度,所以最好是把多条SQL语句显示放在begin和commit之间,组成一个事务去提交。
InnoDB支持数据行锁定,MyISAM不支持行锁定,只支持锁定整个表。即MyISAM同一个表上的读锁和写锁是互斥的,MyISAM并发读写时如果等待队列中既有读请求又有写请求,默认写请求的优先级高,即使读请求先到,所以MyISAM不适合于有大量查询和修改并存的情况,那样查询进程会长时间阻塞。因为MyISAM是锁表,所以某项读操作比较耗时会使其他写进程饿死。
InnoDB支持外键,MyISAM不支持。
InnoDB的主键范围更大,最大是MyISAM的2倍。
InnoDB不支持全文索引,而MyISAM支持。全文索引是指对char、varchar和text中的每个词(停用词除外)建立倒排序索引。MyISAM的全文索引其实没啥用,因为它不支持中文分词,必须由使用者分词后加入空格再写到数据表里,而且少于4个汉字的词会和停用词一样被忽略掉。
MyISAM支持GIS数据,InnoDB不支持。即MyISAM支持以下空间数据对象:Point,Line,Polygon,Surface等。
没有where的count(*)使用MyISAM要比InnoDB快得多。因为MyISAM内置了一个计数器,count(*)时它直接从计数器中读,而InnoDB必须扫描全表。所以在InnoDB上执行count(*)时一般要伴随where,且where中要包含主键以外的索引列。为什么这里特别强调&主键以外&?因为InnoDB中primary index是和raw data存放在一起的,而secondary index则是单独存放,然后有个指针指向primary key。所以只是count(*)的话使用secondary index扫描更快,而primary key则主要在扫描索引同时要返回raw data时的作用较大。
&&InnoDB&&
&&构成上的区别:&&
&&每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。&&.frm文件存储表定义。&&数据文件的扩展名为.MYD (MYData)。&&索引文件的扩展名是.MYI (MYIndex)。&&
&&基于磁盘的资源是InnoDB表空间数据文件和它的日志文件,InnoDB 表的大小只受限于操作系统文件的大小,一般为 2GB&&
&&事务处理上方面:&&
&&MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持&&
&&InnoDB提供事务支持事务,外部键等高级数据库功能&&
&&SELECT&& UPDATE,INSERT,Delete操作&&
&&如果执行大量的SELECT,MyISAM是更好的选择&&
&&1.如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表&&2.DELETE&& FROM table时,InnoDB不会重新建立表,而是一行一行的删除。&&3.LOAD&& TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用&&
&&对AUTO_INCREMENT的操作&&&&
&&每表一个AUTO_INCREMEN列的内部处理。&&MyISAM为INSERT和UPDATE操作自动更新这一列。这使得AUTO_INCREMENT列更快(至少10%)。在序列顶的值被删除之后就不能再利用。(当AUTO_INCREMENT列被定义为多列索引的最后一列,可以出现重使用从序列顶部删除的值的情况)。&&AUTO_INCREMENT值可用ALTER TABLE或myisamch来重置&&对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引&&更好和更快的auto_increment处理&&
&&如果你为一个表指定AUTO_INCREMENT列,在数据词典里的InnoDB表句柄包含一个名为自动增长计数器的计数器,它被用在为该列赋新值。&&自动增长计数器仅被存储在主内存中,而不是存在磁盘上&&关于该计算器的算法实现,请参考&&AUTO_INCREMENT列在InnoDB里如何工作&&
&&表的具体行数&&
&&select count(*) from table,MyISAM只要简单的读出保存好的行数,注意的是,当count(*)语句包含&& where条件时,两种表的操作是一样的&&
&&InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行&&
&&提供行锁(locking on row level),提供与 Oracle 类型一致的不加锁读取(non-locking read in&& SELECTs),另外,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like &%aaa%&MySQL数据库InnoDB和MyISAM数据引擎的差别-阿里云资讯网
MySQL数据库InnoDB和MyISAM数据引擎的差别
发布时间:
更新时间:
来源:网络
作者:luchaibang
  InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型,不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。
  MyIASM是IASM表的新版本,有如下扩展:
  1. 层次的可移植性。
  2. NULL列索引。
  3. 对变长行比ISAM表有更少的碎片。
  4. 支持大文件。
  5. 更好的索引压缩。
  6. 更好的键吗统计分布。
  7. 更好和更快的auto_increment处理。
  以下是一些细节和具体实现的差别:
  1. InnoDB不支持FULLTEXT类型的索引。
  2. InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。
  3. 对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。
  4. DELETE FROM table时,InnoDB不会重新建立表,一行一行的删除。
  5. LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(外键)的表不适用。
  另外,InnoDB表的行锁也不是绝对的,如果在执行一个时MySQL不能确定要扫描的范围,InnoDB表会锁全表,例如update table set num=1 where name like %aaa%。
  任何一种表都不是万能的,只用恰当的针对业务类型来选择的表类型,才能最大的发挥MySQL的性能优势。&
本站所有文章全部来源于互联网,版权归属于原作者。本站所有转载文章言论不代表本站观点,如是侵犯了原作者的权利请发邮件联系站长(yanjing@),我们收到后立即删除。
当日送达服务
摘要: 据国外媒体报道,波士顿咨询公司(BCG)周二发布的最新报告显示,虽然同日送达服务已经成为电子商务领域最热门的趋势之一,但对于大多数美国消费者而言,这项服务过于昂贵,这使 & 据国外媒体报道,波士顿咨询公司(BCG)周二发布的最新报告显示,虽然同日送达服务已经成为电子商务领域最热门的趋势之一,但对于大多数美国消费者而言,这项服务过于昂贵,这使得同日送达有可能成为网购时代的又一...
摘要: 兵马未动,粮草先行。继2月21日为公司更名,并就年度计划、经营策略、组织架构、人员任命进行多项部署后,张近东在即将召开的2013年两会上也准备了充足的弹药。 张近东是全国政 兵马未动,粮草先行。继2月21日为公司更名,并就年度计划、经营策略、组织架构、人员任命进行多项部署后,张近东在即将召开的2013年两会上也准备了充足的“弹药”。 张近东是全国政协委员、苏宁云商集团股份有限公司(0...
在市场经济告诉发展的今天,因为互联网的诞生造就了很多的草根逆袭的人。互联网创业也已经成为一个时代的潮流,非常的的人借助互联网完成了自己的梦想,就拿东莞市末班车网络科技有限公司来说,就帮助了几万的普通职业者完成了人生华丽的转身。其CEO莫海军就是一个同过互联网创业的草根创业者,3年达到2.55亿的销售额,不的不说,这又是互联网创业实现的一个奇迹。 我们今天非常荣幸请到了东莞市末班车网络科技有限...
摘要: 尽管超极本问世已经两年多时间,但超极本市场一直都不温不火,这让一直唱多超极本的英特尔中国区总裁杨叙感到不轻松。 在日前于深圳举办的“第三届英特尔产业创新峰会”上,杨 &   尽管超极本问世已经两年多时间,但超极本市场一直都不温不火,这让一直唱多超极本的英特尔中国区总裁杨叙感到不轻松。   在日前于深圳举办的“第三届英特尔产业创新峰会”上,杨叙在接受南都记者专访时承认,超极本...
摘要: 尽管超极本问世已经两年多时间,但超极本市场一直都不温不火,这让一直唱多超极本的英特尔中国区总裁杨叙感到不轻松。 在日前于深圳举办的“第三届英特尔产业创新峰会”上,杨   尽管超极本问世已经两年多时间,但超极本市场一直都不温不火,这让一直唱多超极本的英特尔中国区总裁杨叙感到不轻松。   在日前于深圳举办的“第三届英特尔产业创新峰会”上,杨叙在接受南都记者专访时承认,超极本并没有取得预期...
摘要: 南都漫画:张建辉 新旧媒体在对抗中启动吸金磨盘 央视欲发力全媒体经营、人人网等社交阵营主打互动营销 伦敦奥运会已进入百日冲刺阶段倒计时100天,体育盛会的吸金磨盘再次转动 & & 南都漫画:张建辉 新旧媒体在对抗中启动吸金磨盘 央视欲发力全媒体经营、人人网等社交阵营主打“互动营销” 伦敦奥运会已进入“百日冲刺”阶段———倒计时100天,体育盛会的吸金磨盘再次转动。...
行业架构师咨询
服务与支持
账号与支持
关注阿里云
InternationalMyISAM和InnoDB两种“引擎”的区别
&&&&&&&&&&&&
  存储引擎是什么?  MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。  例如,如果你在研究大量的临时数据,你也许需要使用内存存储引擎。内存存储引擎能够在内存中存储所有的表格数据。又或者,你也许需要一个支持事务处理的数据库(以确保事务处理不成功时数据的回退能力)。  这些不同的技术以及配套的相关功能在MySQL中被称作存储引擎(也称作表类型)。MySQL默认配置了许多不同的存储引擎,可以预先设置或者在MySQL服务器中启用。你可以选择适用于服务器、数据库和表格的存储引擎,以便在选择如何存储你的信息、如何检索这些信息以及你需要你的数据结合什么性能和功能的时候为你提供最大的灵活性。  选择如何存储和检索你的数据的这种灵活性是MySQL为什么如此受欢迎的主要原因。其它数据库系统(包括大多数商业选择)仅支持一种类型的数据存储。遗憾的是,其它类型的数据库解决方案采取的“一个尺码满足一切需求”的方式意味着你要么就牺牲一些性能,要么你就用几个小时甚至几天的时间详细调整你的数据库。使用MySQL,我们仅需要修改我们使用的存储引擎就可以了。  如何确定有哪些存储引擎可用  你可以在MySQL(假设是MySQL服务器4.1.2以上版本)中使用显示引擎的命令得到一个可用引擎的列表。  mysql&  +————+———+—————————————————-+  | 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引擎)。  事务处理  事务处理功能通过提供在向表中更新和插入信息期间的可靠性。这种可靠性是通过如下方法实现的,它允许你更新表中的数据,但仅当应用的应用程序的所有相关操作完全完成后才接受你对表的更改。例如,在会计处理中每一笔会计分录处理将包括对借方科目和贷方科目数据的更改,你需要要使用事务处理功能保证对借方科目和贷方科目的数据更改都顺利完成,才接受所做的修改。如果任一项操作失败了,你都可以取消这个事务处理,这些修改就不存在了。如果这个事务处理过程完成了,我们可以通过允许这个修改来确认这个操作。
微信公众号
TechTarget
TechTarget中国
查看更多评论
敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。
时隔一个月,数据库市场经过一轮“洗牌”,旧的市场格局是否会被打破,曾经占巨大市场份额的企业是否可能失去优势?
2016年下半年,数据库排行榜的前二十名似乎都“固守阵地”,在排名上没有太大的变动。随着2017年的悄然而至,数据库的排名情况是否会有新的看点?
当Alexander Culiniac和他的同事在TickTrade系统公司建立一个基于云的交易平台时,面临一些基本的约束。那就是,系统必须在云上工作良好并且经济实用。
数据库知识网站DB-engines更新了2016年11月份的数据库流行度排行榜。TechTarget数据库网站将与您一同关注11月份的榜单排名情况。
由于内部优化算法更简单,而且执行的CPU指令较少,所以内存数据的速度比基于磁盘的数据库快。访问内存数据可以提高响应速度。
在本次的技术手册中,我们为您提供了PL/SQL的基础知识以及专家指导,包括了PL/SQL中的数据类型简介、PL/SQL函数与触发器以及PL/SQL中的存储过程等,相信您无论是高手还是菜鸟都可以获得有帮助的信息。
在前两次SSIS技术专题中,我们介绍了关于SSIS的基础知识,大家已经有所了解。而在本次技术手册中,我们将介绍包括扩展SSIS包在内的进阶技巧,相信对那些已有SSIS使用经验的朋友也会有所帮助。
本文为SQL&Server&2008初学者指南,主要介绍SQL&Server2008&T-SQL支持的基本元素和基本操作。
TechTarget
企业级IT网站群
TechTarget中国 版权所有
All Rights Reserved, Copyright
TechTarget中国 版权所有
All Rights Reserved, Copyright}

我要回帖

更多关于 innodb行锁原理 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信