InnoDB 与 MyISAM 区别

 

1、myisam可以对索引进行压缩,innodb不压缩

2、索引都用b-tree, innodb使用 b+tree,NDB Cluster使用 T-Tree.

3、myisam 表级锁, innodb 行级锁 支持mvcc (多并发版本控制)行级锁的升级,多事务并发的数据一致。采用快照的形式。

4、myisam 号称读速度比Innodb要快 且支持 读写并发(select的时候 同时insert)

5、InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。

6、索引方式不一样

MyISAM的索引方式是非聚集 ,Innodb 聚集索引

MyISAM 索引文件 和 数据文件是分开的,索引文件仅保存数据记录的地址

Innodb 索引文件和数据文件在一起

innodb的数据文件本身要按主键聚集,所以InnoDB要求表必须有主键(MyISAM可以没有)。如果没有会把第一个唯一索引当做主键。如果没有唯一索引,就自动生成一个隐藏列,类型为长整形。

7、 MyISAM的辅助索引和主键索引 data部分都是指向数据的指针,innodb 的data部分是主键的值而不是地址。这就让innodb 如果不是主键索引就要先找辅助索引再找主键索引。 所以不建议用过长的索引做主键,会使其他辅助索引都变得很大。

8、myisam 支持全文索引,innodB不支持全文索引

原文地址:https://www.cnblogs.com/yuyutianxia/p/3847800.html