温馨提示×

温馨提示×

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

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

聚簇索引和非聚簇区别

发布时间:2026-09-20 23:31:36 来源:亿速云 阅读:89 作者:小樊 栏目:数据库

聚簇索引(Clustered Index)和非聚簇索引(Non-clustered Index,也叫二级索引 / 辅助索引)是数据库中两种核心索引类型,主要区别如下:


1. 数据存储方式不同(最核心区别)

聚簇索引

  • 表的数据行本身就是按聚簇索引的顺序物理存储的
  • 索引的叶子节点 就是数据页
  • 一张表 只能有一个聚簇索引

非聚簇索引

  • 索引和数据是分开存储的
  • 叶子节点存的是:索引列值 + 聚簇索引键(或行指针)
  • 一张表 可以有多个非聚簇索引

2. 查询过程不同

聚簇索引查询

索引 → 直接定位数据行

✅ 一次查找即可拿到完整数据

非聚簇索引查询

索引 → 找到聚簇索引键 → 再查聚簇索引 → 拿到数据

❌ 通常需要“回表”(除非覆盖索引)


3. 对写入性能的影响

聚簇索引

  • 插入数据可能需要移动数据页(如主键非自增)
  • 写入成本相对较高

非聚簇索引

  • 插入时要额外维护多个索引结构
  • 索引越多,写越慢

4. 典型示例(以 MySQL InnoDB 为例)

-- 主键就是聚簇索引
CREATE TABLE user (
  id INT PRIMARY KEY,     -- 聚簇索引
  name VARCHAR(50),
  INDEX idx_name(name)   -- 非聚簇索引
);
  • id:数据按 id 顺序存
  • idx_name:存 name → id,查 name 后再用 id 找数据

5. 对比总结表

对比项 聚簇索引 非聚簇索引
数量 只能 1 个 可多个
叶子节点 数据行 索引值 + 主键
是否回表 通常要
查询速度 稍慢
物理顺序 决定表顺序 不影响

6. 一句话总结

聚簇索引决定数据怎么存,非聚簇索引只是“目录”。

如果你愿意,我也可以结合 MySQL / SQL Server / Oracle 或具体业务场景再细讲。

向AI问一下细节

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

AI