1、MyISAM引擎索引结构的叶子节点的数据域,存放的并不是实际的数据记录,而是数据记录的地址。索引文件与数据文件分离,这样的索引称为“*非聚簇索引*”。MyISAM的主索引与辅助索引区别并不大,只是主键索引不能有重复的关键字。
如下图所示为非聚簇索引的主键索引:
其检索算法:先按照B+Tree的检索算法检索,找到指定关键字,则取出对应数据域的值,作为地址取出数据记录。
2、InnoDB引擎索引结构的叶子节点的数据域,存放的就是实际的数据记录(对于主索引,此处会存放表中所有的数据记录;对于辅助索引此处会引用主键,检索的时候通过主键到主键索引中找到对应数据行),或者说,InnoDB的数据文件本身就是主键索引文件,这样的索引被称为“聚簇索引”,一个表只能有一个聚簇索引。
如下图所示为聚簇索引的主键索引:
区别
1. 事务安全(MyISAM不支持事务,INNODB支持事务)
2. 外键 MyISAM 不支持外键, INNODB支持外键.
3. 锁机制(MyISAM时表锁,innodb是行锁)
4. 查询和添加速度(MyISAM批量插入速度快)
5. 支持全文索引(MyISAM支持全文索引,INNODB不支持全文索引)
6.MyISAM内存空间使用率比InnoDB低