热门搜索
分布式
数据库一体机
云数据库
建设银行
保险核心
密集交易
登录
注册
达梦聚集索引和非聚集索引的区别
评 论
专栏
/
培训园地
/
文章详情
/
达梦聚集索引和非聚集索引的区别
文橘本可
2026/09/16
93
0
0
摘要
达梦聚集索引和非聚集索引的区别,结合例子说明
一、核心区别
聚集索引(一级索引/主索引)
• 存储方式:聚集索引按照索引键构造一棵 B+ 树,表数据直接存储在 B+ 树的叶子节点上,即聚集索引就是表数据本身,通过定位索引可直接在 B+ 树中找到整行数据。
• 数量限制:每一个表有且只有一个聚集索引。
默认行为:当建表语句未指定聚集索引键时,DM 的默认聚集索引键是 ROWID,即记录默认以 ROWID 在页面中排序。若指定了索引键,表中数据都会根据指定索引键排序。
执行计划操作符:聚集索引扫描对应 CSCN2,聚集索引数据定位对应 CSEK2。
非聚集索引(二级索引/辅助索引)
• 存储方式:将二级索引列和聚集索引列(或 ROWID 指针)共同存储在 B+ 树叶子节点上。如果查找的是非聚集索引键值或聚集索引键,可直接在 B+ 树中找到;如果查找索引键值以外的数据,则需要回到一级索引中进行查找,这个过程称为回表。
• 数量限制:每一个表可以有多个非聚集索引。
执行计划操作符:二级索引扫描对应 SSCN,二级索引数据定位对应 SSEK2,回表操作对应 BLKUP2。
二、结合示例分析
1.聚集索引查找
2.使用非聚集索引查找(仅查索引列)
3.使用非聚集索引查找(需获取非索引列)
三、总结
• 聚集索引:表数据直接存储在 B+树叶子节点上,定位索引后即可直接获取整行数据,效率最高;但每个表只能有一个,且不支持大字段列。
• 非聚集索引:叶子节点仅存储索引列和聚集索引键,定位索引后若需获取其他列数据,则需要回表到聚集索引;但每个表可以创建多个,灵活性高。
• 默认聚集索引键:当建表未指定聚集索引键时,达梦默认使用ROWID作为聚集索引键,记录默认以 ROWID 在页面中排序。若指定了索引键,表中数据都会根据指定索引键排序。
• 主键与聚集索引:达梦通过参数PK_WITH_CLUSTER控制主键是否自动转化为聚集主键。默认情况下(值为 0),主键不会自动变为聚集主键,这是为了兼容 Oracle 等数据库的行为。
四、注
• 聚集索引不支持大字段列,若需将聚集主键改为非聚集索引,可通过在另一列上创建聚集索引来替代原聚集主键,然后删除新索引即可实现。
• 如果在表上自定义了聚集索引,那么 ROWID 不再是聚集索引键,使用 ROWID 进行查询时可能走全表扫描(CSCN)。
• 回表代价
非聚集索引查询需要关注是否发生 BLKUP2。设计时尽量将高频查询字段建成覆盖索引,避免回表,特别是并发高、数据量大的场景。
赞
上一篇:
DSC集群动态增加节点
下一篇:
主备架构动态增加实时备库
评论
登 录
后发表回复
提 交
作者
文章
阅读量
获赞
扫一扫
联系客服