关于Mysql的存储引擎Innodb和Myisam

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/cuiyaonan2000/article/details/100578562

数据结构

        MyIsam和InnoDB 都是采用 B+Tree这种数据结构来实现 B-Tree索引。而很大的区别在于,InnoDB 存储引擎采用“聚集索引”的数据存储方式实现B-Tree索引,所谓“聚集”,就是指数据行和相邻的键值紧凑地存储在一起,注意 InnoDB 只能聚集一个叶子页(16K)的记录(即聚集索引满足一定的范围的记录),因此包含相邻键值的记录可能会相距甚远。

        MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。而在InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存了完整的数据记录。同时Innodb的次索引指向对主键的引用,Myisam的次索引和主索引都指向物理

Innodb与Myisam应用场景

       因为MyISAM相对简单所以在效率上要优于InnoDB.如果系统读多,写少。对原子性要求低。那么MyISAM最好的选择。且MyISAM恢复速度快。可直接用备份覆盖恢复。如果系统读少,写多的时候,尤其是并发写入高的时候。InnoDB就是首选了。 
两种类型都有自己优缺点,选择那个完全要看自己的实际类弄。

InnoDB索引和MyISAM索引的区别

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

  1. InnoDB的数据文件本身就是主索引文件。而MyISAM的主索引和数据是分开的。
  2. InnoDB的辅助索引data域存储相应记录主键的值而不是地址。而MyISAM的辅助索引和主索引没有多大区别。
  3. innoDB是聚簇索引,数据挂在逐渐索引之下。

 锁

  1. MyISAM使用的是表锁
  2. InnoDB使用行锁

 事务

  1. MyISAM没有事务支持和MVCC
  2. InnoDB支持事务和MVCC

全文索引

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

主键

  1. MyISAM允许没有任何索引和主键的表存在,索引都是保存行的地址
  2. InnoDB如果没有设定主键或非空唯一索引,就会自动生成一个6字节的主键,数据是主索引的一部分,附加索引保存的是主索引的值

外键

  1.  MyISAM不支持
  2. InnoDB支持

猜你喜欢

转载自blog.csdn.net/cuiyaonan2000/article/details/100578562