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的区另外细致内容,更多请关注 百分百源码网 其它相干文章!