达梦数据库分区索引知识汇总

全局索引知识点

相关信息解读

达梦数据库的全局索引是一个Btree索引,所以它是和分区表分开维护的。全局索引的相关信息如下(摘自DM8系统管理员手册):

创建水平分区表时,若表的PRIMARY KEY未包含所有分区列,系统会自动创建全局索引,否则自动创建局部索引。创建全局索引时,在水平分区表的主表创建全局索引,每个

分区子表的数据都被索引在同一个 B 树中,并在每个子表创建全局本地索引,与主表共用一个 B 树。

从上述中可以看出,这里引入了一个局部索引和本地索引的概念。

局部索引:创建索引时没有global关键字的索引。

本地索引:创建全局索引时,系统自动为子表创建的索引。

看如下例子:

CREATE TABLE test(c1 INT, c2 INT PRIMARY KEY) PARTITION BY HASH(c1) PARTITIONS 2;

可以看到确实有一个被索引INDEX33555639被创建。而且这个全局索引是基于c2主键列创建的。我们查询dba_ind_columns视图可以看到如下信息:

利用图形化工具,可以看到相关的索引属性:

唯一索引

先看结论:

在水平分区表上创建唯一索引时,全局唯一索引总是可以创建的,若要创建非全局唯一

索引,则要求索引键包含所有的分区键。

    从如如上信息可以看到,唯一索引分为两种,全局唯一索引和非全局(局部)唯一索引。

而对局部唯一索引的要求是:索引键包含所有分区键。看文档里说这个的原因是:

因为对于局部索引,每一个分区子表都会建立一个索引分区,负责索引分区子表的数据。由于每个索引分区只负责索引本分区上的数据,其他分区上的数据无法维护,只有当分区键都包含在索引键中时,才能对分区主表保证索引键唯一。

其他限制

只能在水平分区表上创建局部聚集索引,不能创建全局聚集索引;不能在水平分

区表上创建局部唯一函数索引;HUGE水平分区表不支持全局索引

这里的HUGE水平分区表指的是列级存储的分区表。

疑问与限制

全局索引和局部索引的区别究竟是是么?再看定义:

  • 全局索引是指每个表分区的数据都被索引在同一个 B 树中。
  • 局部索引是指每个表分区都对应一个索引分区,并且只能检索该分区上的数据

从这里看,跨分区查询较适合使用全局索引,而非跨分区查询较适合于局部索引。

再记录一些收集到的关于这两类索引(包含约束)的限制:

1、支持对水平分区表建立普通索引、唯一索引、聚集索引和函数索引。

2、堆表上的 primary key 会自动变为全局索引。

3、不能在水平分区表上建立自引用约束。

4、不能对水平分区表建立全局聚集索引或局部唯一函数索引(之前提过,这里再拿出来一下)

5、不能对分区子表单独建立索引。

6、不允许引用水平分区子表作为外键约束。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值