版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
数据结构
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索引的区别
存储结构(主索引/辅助索引)
- InnoDB的数据文件本身就是主索引文件。而MyISAM的主索引和数据是分开的。
- InnoDB的辅助索引data域存储相应记录主键的值而不是地址。而MyISAM的辅助索引和主索引没有多大区别。
- innoDB是聚簇索引,数据挂在逐渐索引之下。
锁
- MyISAM使用的是表锁
- InnoDB使用行锁
事务
- MyISAM没有事务支持和MVCC
- InnoDB支持事务和MVCC
全文索引
- MyISAM支持FULLTEXT类型的全文索引
- InnoDB不支持FULLTEXT类型的全文索引,但是InnoDB可以使用sphinx插件支持全文索引,并且效果更好
主键
- MyISAM允许没有任何索引和主键的表存在,索引都是保存行的地址
- InnoDB如果没有设定主键或非空唯一索引,就会自动生成一个6字节的主键,数据是主索引的一部分,附加索引保存的是主索引的值
外键
- MyISAM不支持
- InnoDB支持