一。索引
1. InnoDB的数据文件本身就是索引文件。MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。而在InnoDB中,表数据文件本身
就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是
主索引。
2. InnoDB的辅助索引data域存储相应记录主键的值而不是地址
二。其他
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不支持 全文索引
9、任何改变表结构的操作都会让innodb重新建表,包括改变索引。
10、innodb有外键约束,这个功能是mysql服务器本身不具备的。
InnoDB 与 MyISAM 区别