聚集索引VS非聚集索引

数据即索引,索引即数据

    聚集索引(聚簇索引):以innodb作为存储引擎的表,表中的数据都会有一个主键,即使你不创建主键,系统也会帮你创建一个隐式的主键。这是因为innodb是把数据放在B+树中的,而B+树的键值就是主键,在B+树的叶子节点中,存储了表中所有的数据。这种主键作为B+树索引的键值而构建的B+树索引,我们称之为聚集索引。 非聚集索引(非聚簇索引):以主键意外的列值作为键值构建的B+树索引,我们称之为非聚集索引。非聚集索引与聚集索引的区别在于非聚集索引的叶子节点不存储表中的数据,而是存储该列对应的主键,想要查找数据我们还需要根据主键再去聚集索引中进行查找,这个再根据聚集索引查找数据的过程,我们称之为回表。

聚集索引和非聚集索引的区别:

    一个表中只能拥有一个聚集索引,而非聚集索引一个表中可以存在多个; 聚集索引,索引中键值的逻辑顺序决定了表中相应行的物理顺序;非聚集索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同; 索引是通过二叉树的数据结构来描述的,我们可以这么理解聚集索引:索引的叶节点就是数据节点。而非聚集索引的叶节点仍然是索引节点,只不过有一个指针指向对应的数据块; 聚集索引:物理存储按照索引排序;非聚集索引:物理存储不按照索引排序。
经验分享 程序员 微信小程序 职场和发展