网站开发讲座心得体会,wordpress建站博客园,汕头市建设网站,重庆装修公司排名前十口碑推荐版权声明#xff1a;本文为博主原创文章#xff0c;未经博主允许不得转载。https://blog.csdn.net/21aspnet/article/details/89303988聚集索引和非聚集索引以及MySQL的InnoDB和MyISAM经常遇到有人向我咨询这个问题#xff0c;其实呢#xff0c;网上帖子很多#xff0c;也…版权声明本文为博主原创文章未经博主允许不得转载。https://blog.csdn.net/21aspnet/article/details/89303988聚集索引和非聚集索引以及MySQL的InnoDB和MyISAM经常遇到有人向我咨询这个问题其实呢网上帖子很多也说的都对但是呢看客可不一定是真的理解了。所以今天在这里用最简短的语言让你明白这些区别。看这种图表就一切都明白了存储引擎索引类型主键叶子节点非主键叶子节点MyISAM非聚簇数据地址数据地址InnoDB聚簇全部数据主键值key重复不能能问题InnoDB和MyISAM选那个MySQL5.6以后选InnoDB。上面已经把这个高频问题说完了下面是为了满足好学者所做的扩展名词解释Clustered Index聚集索引又称聚簇索引。Nonclustered indexes非聚集索引又称非聚簇索引。Secondary Key二级索引因为聚集索引只能有一个所有同一个表其他字段只能是二级索引也就是非聚集索引。看看经典著作《高性能MySQL(第3版)》关于聚簇索引的说明再看看关于隐式创建聚簇索引的说明关于二级索引MyISAM的数据分布InnDB最关键的就是聚集索引叶子节点存所有的数据项二级索引存的是主键值而不是行指针而MyISAM存的是行指针下面是 InnoDB和MyISAM的索引数据存储分布如图所示MyISAM是索引叶子节点有指针指向而 InnoDB则直接存数据没用指针下面这个帖子也是写的极好的 作者很会画图整体还是没用超越《高性能MySQL(第3版)》如果上面的还看不懂可以看看此贴--《MySQL索引背后的数据结构及算法原理》。MyISAM索引实现MyISAM引擎使用BTree作为索引结构叶节点的data域存放的是数据记录的地址。下图是MyISAM索引的原理图InnoDB索引实现虽然InnoDB也使用BTree作为索引结构但具体实现方式却与MyISAM截然不同。第一个重大区别是InnoDB的数据文件本身就是索引文件。从上文知道MyISAM索引文件和数据文件是分离的索引文件仅保存数据记录的地址。而在InnoDB中表数据文件本身就是按BTree组织的一个索引结构这棵树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键因此InnoDB表数据文件本身就是主索引。第二个与MyISAM索引的不同是InnoDB的辅助索引data域存储相应记录主键的值而不是地址