GBase 8c 部分索引-建立一个部分唯一索引

部分索引用途之一:并不要求索引被用于查询。其思想是在一个表的子集上创建一个唯一索引,如下例所示。这对那些满足索引谓词的行强制了唯一性,而对那些不满足的行则没有影响。

假设我们有一个描述测试结果的表。我们希望保证其中对于一个给定的主题和目标组合只有一个“成功”项,但其中可能会有任意多个“不成功”项。实现它的方式是:

CREATE TABLE tests (

    subject text,

    target text,

    success boolean,

    ...

);

CREATE UNIQUE INDEX tests_success_constraint ON tests (subject, target)

    WHERE success;

当有少数成功测试和很多不成功测试时这是一种特别有效的方法。

通过使用部分索引子句只处理空列值,该索引只允许索引列中有一个空值,并且用一个表达式索引子句来索引 true 来替代 null:

CREATE UNIQUE INDEX tests_target_one_null ON tests ((target IS NULL)) WHERE target IS NULL;

同时,部分索引也可以被用来重载系统的查询规划选择。同样,具有特殊分布的数据集可能导致系统在它并不需要索引的时候选择使用索引。在此种情况下可以被建立,这样它将不会被那些无关的查询所用。通常,GBase 8c会对索引使用做出合理的选择(例如,它会在检索公值时避开索引,这样前面的例子只能节约索引尺寸,它并非是避免索引使用所必需的),非常不正确的规划选择则需要作为故障报告。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值