说下聚簇索引和非聚簇索引的区别

Java面试 潘老师 8个月前 (09-05) 165 ℃ (0) 扫码查看

Java面试题:说下聚簇索引和非聚簇索引的区别

得分点:

索引即数据、二次查询

标准回答:

聚簇索引和非聚簇索引之间的主要区别在于数据和索引是否分离。在数据库中,通常有两种类型的索引:聚簇索引和非聚簇索引。

  • 聚簇索引:聚簇索引将数据与索引存储在一起。这意味着找到索引也就找到了相应的数据。在InnoDB存储引擎中,每个表只能有一个聚簇索引,通常是建立在主键上的。即使没有明确指定主键,InnoDB也会生成一个聚簇索引。因此,聚簇索引中存储了整个数据行。
  • 非聚簇索引:非聚簇索引将数据和索引存储分离开。索引树的叶子节点存储了数据行的地址,而不是数据本身。当使用非聚簇索引来访问索引外的其他字段时,需要进行二次查找,也就是从索引中找到数据的地址,然后再根据地址去检索实际的数据。

在MyISAM存储引擎中,所有索引都属于非聚簇索引,叶子节点存储着数据的地址。对于主键索引和普通索引,在存储方式上没有区别。

加分回答:

在InnoDB存储引擎中,B+树索引可以分为聚簇索引和辅助索引(非聚簇索引)。无论是哪种类型的索引,每个页的大小都为16KB,且不可更改。

聚簇索引是根据主键创建的一棵B+树,聚簇索引的叶子节点存放了表中的所有记录。辅助索引则是根据索引键创建的B+树,其叶子节点仅存放索引键值以及该索引键值所指向的主键。这意味着,通过辅助索引查找数据时,通常还需要根据主键值查找聚簇索引以获取实际的数据,这个过程被称为书签查找。

辅助索引不包含行记录的所有数据,因此每页可以存放更多的键值,导致其树的高度通常较低。这也意味着辅助索引的查询性能可能比聚簇索引更高效,但在获取完整数据时需要进行额外的查找步骤。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/javainterview/8755.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】