美文网首页
innodb 与 myisam 索引的区别

innodb 与 myisam 索引的区别

作者: Lee_8f69 | 来源:发表于2019-05-20 12:09 被阅读0次


一 MyISAM索引实现

1. 主键索引

MyISAM使用B+树作为索引结构,叶节点data存放的是数据记录的地址。下图为MyISAM表的主索引,Col1为主键。

2. 辅助索引(二级索引)

辅助索引跟主键索引在结构上没有任何区别,只是主键索引的key要求是唯一的,辅助索引的key可以重复。上图为Col2创建一个辅助索引,也是一颗B+ Tree,data域保存数据域的值为地址,读取相应的数据记录。

MyISAM的索引结构叫非聚簇索引,为了区别于InnoDB的聚簇索引。

二 InnoDB索引实现

1 主键索引

主键索引也是B+树结构,实现方式却完全不同。InnoDB表数据文件本身就是一个索引结构,树的叶节点存放了完整的数据记录,这种索引结构叫聚簇索引。

 因为InnoDB的数据文件本身要按主键聚集,所以InnoDB要求表必须有主键(MyISAM可以没有),如果没有显式指定,则mysql会自动选择一个可以唯一标识数据记录的列作为主键。如果不存在这种列,则mysql自动为InnoDB表生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整型。

2 辅助索引

  InnoDB的所有辅助索引都引用主键作为data域。下图为定义在Col3上的一个辅助索引。

因此InnoDB 的索引能提供一种非常快速的主键查找性能。不过,它的辅助索引也会包含主键列,所以如果主键定义的比较大,其他索引也将很大。InnoDB 不会压缩索引。

聚集索引这种实现方式使得按主键的搜索十分高效,但是辅助索引搜索需要检索两遍索引:首先检索辅助索引获得主键,然后用主键到主索引中检索获得记录。

不同存储引擎的索引实现方式对于正确使用和优化索引都非常有帮助,例如知道了InnoDB的索引实现后,就很容易明白为什么不建议使用过长的字段作为主键,因为所有辅助索引都引用主索引,过长的主索引会令辅助索引变得过大。再例如,用非单调的字段作为主键在InnoDB中不是个好主意,因为InnoDB数据文件本身是一颗B+Tree,非单调的主键会造成在插入新记录时数据文件为了维持B+Tree的特性而频繁的分裂调整,十分低效,而使用自增字段作为主键则是一个很好的选择。

三 InnoDB索引MyISAM索引的区别

1 存储结构(主索引/辅助索引)

InnoDB的数据文件本身就是主索引文件。而MyISAM的主索引和数据是分开的。

InnoDB的辅助索引data域存储相应记录主键的值而不是地址。而MyISAM的辅助索引和主索引没有多大区别。

innoDB是聚簇索引,数据挂在逐渐索引之下。

2 锁

MyISAM使用的是表锁

InnoDB使用行锁

3 事务

MyISAM没有事务支持和MVCC

InnoDB支持事务和MVCC

4 全文索引

MyISAM支持FULLTEXT类型的全文索引

InnoDB不支持FULLTEXT类型的全文索引,但是InnoDB可以使用sphinx插件支持全文索引,并且效果更好

5 主键

MyISAM允许没有任何索引和主键的表存在,索引都是保存行的地址

InnoDB如果没有设定主键或非空唯一索引,就会自动生成一个6字节的主键,数据是主索引的一部分,附加索引保存的是主索引的值

6 外键

 MyISAM不支持

InnoDB支持

相关文章

  • mysql索引原理

    说明一下myisam和innodb索引的区别:myisam索引和数据是分开存放的,但是在innodb中主键索引和数...

  • MySQL (二) 创建高性能的索引

    索引类型 B-Tree 索引 先来说说 MyISAM 和 InnoDB 索引的简单区别。MyISAM 使用的前缀压...

  • mysql的引擎、innodb/Myisam 的区别

    四种引擎:Memory、MYISAM、DBD、InnoDB、Archive MyISAM与InnoDB的区别MyI...

  • mysql索引

    1.mysql引擎:innodb,myisam 两者的区别: innodb:聚集索引。数据文件本身就是...

  • mysql

    1、Mysql数据库引擎innodb myisam 区别,两种引擎的索引区别,为什么myisam查询快? 2、My...

  • innodb 与 myisam 索引的区别

    一 MyISAM索引实现 1. 主键索引 MyISAM使用B+树作为索引结构,叶节点data存放的是数据记录的地址...

  • 3、说说InnoDB与MyISAM的区别

    说说InnoDB与MyISAM的区别 1、InnoDB支持事务(MVCC多版本并发控制),MyISAM不支...

  • mysql

    常见的储存引擎 InnoDB MyISAM MyISAM和InnoDB的区别 ①InnoDB支持事务,MyISAM...

  • innodb与myisam

    Innodb 与MyISAM的区别 InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默...

  • MySQL索引背后的数据结构及算法原理

    MySQL索引背后的数据结构及算法原理 MySQL存储引擎InnoDB与Myisam的六大区别

网友评论

      本文标题:innodb 与 myisam 索引的区别

      本文链接:https://www.haomeiwen.com/subject/dmbhzqtx.html