温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

什么是聚集索引和非聚集索引

发布时间:2026-11-01 20:09:21 来源:亿速云 阅读:95 作者:小樊 栏目:数据库

在关系型数据库中,索引(Index)是为了加快数据检索速度而创建的一种数据结构(通常是 B+ 树)。根据索引中是否决定数据的物理存储顺序,索引可以分为聚集索引(Clustered Index)和非聚集索引(Non-Clustered Index)。

下面从定义、特点、区别和使用场景来详细说明。


一、聚集索引(Clustered Index)

定义

聚集索引决定了表中数据的物理存储顺序。
也就是说,表的数据行本身就是按聚集索引的键值排序存储的。

特点

  • 一个表只能有一个聚集索引(因为数据物理顺序只有一种)
  • 叶子节点存放的是整行数据
  • 查询聚集索引列时,通常性能最好
  • 常用于主键(如 SQL Server 默认主键就是聚集索引)

示例(SQL Server)

CREATE CLUSTERED INDEX IX_Users_Id
ON Users(Id);

优点

  • 范围查询(如 BETWEEN、>、<)效率高
  • 按索引列排序读取数据时非常快

缺点

  • 插入、更新索引列可能导致页分裂,影响性能
  • 主键频繁变动时不适合做聚集索引

二、非聚集索引(Non-Clustered Index)

定义

非聚集索引不改变数据的物理存储顺序,而是单独维护一个索引结构,其中保存索引键和指向数据行的指针(或聚集索引键)。

特点

  • 一个表可以有多个非聚集索引
  • 叶子节点存放的是索引键 + 行定位符
    • 有聚集索引时:指向聚集索引键
    • 无聚集索引时:指向数据行地址(堆表)
  • 查询时通常先查索引,再“回表”查数据

示例

CREATE NONCLUSTERED INDEX IX_Users_Name
ON Users(Name);

优点

  • 可针对多个查询条件建立索引
  • 不破坏数据物理存储

缺点

  • 查询可能需要“回表”,性能略低于聚集索引
  • 索引过多会影响写入性能

三、聚集索引 vs 非聚集索引对比

对比项 聚集索引 非聚集索引
数量 只能 1 个 可多个
数据顺序 决定物理存储顺序 不影响物理存储
叶子节点 整行数据 索引键 + 指针
查询速度 快(尤其范围查询) 稍慢(可能回表)
写入成本 较高 相对较低

四、通俗比喻

  • 聚集索引:像一本按拼音排序的字典,内容本身有序
  • 非聚集索引:像书后的“关键词索引”,告诉你内容在第几页

五、使用建议

  • 主键通常是聚集索引(但非必须)
  • 频繁范围查询、排序的字段适合聚集索引
  • 多条件查询可建多个非聚集索引
  • 避免在低选择性字段(如性别)上建索引

如果你使用的是 MySQL / SQL Server / Oracle,我也可以针对具体数据库进一步说明。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手