百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> mysql存储引擎:myIsam和innodb的区别
分享文章到:

mysql存储引擎:myIsam和innodb的区别

发布时间:08/01 来源:未知 浏览: 关键词:
MySQL有多种存储引擎,MyISAM和InnoDB是其中常用的两种。这里介绍对于这两种引擎的一些根本概念(非深入介绍)。MyISAM是MySQL的默许存储引擎,基于传统的ISAM类型,支撑全文搜寻,但不是事务平安的,并且不支撑外键。每 MySQL有多种存储引擎,MyISAM和InnoDB是其中常用的两种。这里介绍对于这两种引擎的一些根本概念(非深入介绍)。

MyISAM是MySQL的默许存储引擎,基于传统的ISAM类型,支撑全文搜寻,但不是事务平安的,并且不支撑外键。每张MyISAM表寄存在三个文件中:frm 文件寄存表格定义;数据文件是MYD (MYData);索引文件是MYI (MYIndex)。

InnoDB是事务型引擎,支撑回滚、解体恢复能力、多版本并发控制、ACID事务,支撑行级锁定(InnoDB表的行锁不是绝对的,要是在施行一个SQL语句时MySQL不克不及肯定要扫描的范畴,InnoDB表一样会锁全表,如like操纵时的SQL语句),以及供给与Oracle类型一致的不加锁读取方式。InnoDB存储它的表和索引在一个表空间中,表空间可以包括数个文件。

中心区别

MyISAM是非事务平安型的,而InnoDB是事务平安型的。

MyISAM锁的粒度是表级,而InnoDB支撑行级锁定。

MyISAM支撑全文类型索引,而InnoDB不支撑全文索引。

MyISAM相对简略,所以在效率上要优于InnoDB,小型利用可以考虑运用MyISAM。

MyISAM表是保留成文件的情势,在跨平台的数据转移中运用MyISAM存储会省略不少的费事。

InnoDB表比MyISAM表更平安,可以在保障数据不会遗失的状况下,切换非事务表到事务表(alter table tablename type=innodb)。

利用场景

MyISAM治理非事务表。它供给高速存储和检索,以及全文搜寻能力。要是利用中需要施行批量的SELECT查询,那么MyISAM是更好的选中。

InnoDB用于事务处置利用程序,拥有众多特性,包含ACID事务支撑。要是利用中需要施行批量的INSERT或UPDATE操纵,则应当运用InnoDB,这样可以提高多会员并发操纵的机能。

Mysql的存储引擎和索引

数据库必需有索引,没有索引则检索历程酿成了次序查寻,O(n)的工夫复杂度险些是不克不及忍耐的。我们非常容易想象出一个只要单关键字组成的表怎样运用B+树进行索引,只有将关键字存储到树的节点即可。当数据库一笔记录里包括多个字段时,一棵B+树就只能存储主键,要是检索的是非主键字段,则主键索引失去作用,又酿成次序查寻了。这时应当在第二个要检索的列上创立第二套索引。 这个索引由独立的B+树来组织。有两种常见的办法可以解决多个B+树拜访统一套表数据的题目,一种叫做聚簇索引(clustered index ),一种叫做非聚簇索引(secondary index)。这两个名字虽然都叫做索引,但这并不是一种独自的索引类型,而是一种数据存储方式。关于聚簇索引存储来说,行数据和主键B+树存储在一起,辅助键B+树只存储辅助键和主键,主键和非主键B+树险些是两品种型的树。关于非聚簇索引存储来说,主键B+树在叶子节点存储指向真正数据行的指针,而非主键。

InnoDB运用的是聚簇索引,将主键组织到一棵B+树中,而行数据就贮存在叶子节点上,若运用"where id = 14"这样的前提查寻主键,则按照B+树的检索算法即可查寻到对应的叶节点,之后获得行数据。若对Name列进行前提搜寻,则需要两个步骤:首先步在辅助索引B+树中检索Name,抵达其叶子节点猎取对应的主键。第二步运用主键在主索引B+树种再施行一次B+树检索操纵,终究抵达叶子节点即可猎取整行数据。

MyISM运用的是非聚簇索引,非聚簇索引的两棵B+树看上去没什么不一样,节点的构造完全一致只是存储的内容不一样罢了,主键索引B+树的节点存储了主键,辅助键索引B+树存储了辅助键。表数据存储在独立的地方,这两颗B+树的叶子节点都运用一个地址指向真正的表数据,关于表数据来说,这两个键没有任何差别。因为索引树是独立的,通过辅助键检索无需拜访主键的索引树。

为了更形象注明这两种索引的区别,我们假想一个表如下图存储了4行数据。其中Id作为主索引,Name作为辅助索引。图示清晰的显示了聚簇索引和非聚簇索引的悬殊。

我们重点关注聚簇索引,看上去聚簇索引的效率显明要低于非聚簇索引,由于每次运用辅助索引检索都要经过两次B+树查寻,这不是画蛇添足吗?聚簇索引的优势在哪?

1 因为行数据和叶子节点存储在一起,这样主键和行数据是一起被载入内存的,寻到叶子节点就可以立即将行数据返回了,要是按照主键Id来组织数据,获得数据更快。

2 辅助索引运用主键作为"指针" 而不是运用地址值作为指针的益处是,减少了当涌现行挪移或者数据页破裂时辅助索引的保护工作,运用主键值当作指针会让辅助索引占用更多的空间,换来的益处是InnoDB在挪移行时不必更新辅助索引中的这个"指针"。也就是说行的位置(实现中通过16K的Page来定位,背面会波及)会随着数据库里数据的修改而产生变化(前面的B+树节点破裂以及Page的破裂),运用聚簇索引就可以保障无论这个主键B+树的节点怎样变化,辅助索引树都不挨影响。

所以在百万级数据及更大数据状况下,mysql innoDB 的索引体现更加优良!

以上就是mysql存储引擎:myIsam和innodb的区另外细致内容,更多请关注 百分百源码网 其它相干文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有156人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板