南大通用GBase8s 常用SQL语句(五十二)

南大通用GBase8s 常用SQL语句(五十二)
系统索引的分片存储
如果存在用户定义的索引,系统索引(如那些实现引用约束和唯一约束的索引)将利用用户定义的索引。 如果没有用户定义的索引可以利用,系统索引保留未分片,并移到创建该数据库的 dbspace 中。
要分片系统索引,请在约束列中创建分片索引,然后使用 ALTER TABLE 语句添加约束。
唯一索引的分片存储
您可以在使用循环或基于表达式的分布方案的表上分片唯一索引,但是分片表达式中的列必须是被索引列的一部分。如果您的索引分片存储策略违反了此限制,则 CREATE INDEX 语句失败并且工作会回滚。
临时表上索引的分片存储
您可在临时表上分片唯一索引(仅当下面的表使用基于表达式的分布方案时)。就是说,定义临时表的 CREATE TEMP TABLE 语句必须指定显式的基于表达式的分布方案。(不支持按 ROUND ROBIN 索引的分片,且自动按照 LIST 或 INTERVAL 分片,对于表的唯一索引使用列表或区间存储分区策略。)
如果尝试在当您创建表时没有为其指定分片存储策略的临时表上创建分片的唯一索引,则数据库服务器在 DBSPACETEMP 环境变量指定的第一个 dbspace 内创建索引。有关 DBSPACETEMP 环境变量的更多信息,请参阅 GBase 8s SQL 参考指南 。
有关临时表的缺省存储特征的更多信息,请参阅临时表的存储位置。
索引模式
使用 CREATE INDEX 语句的索引方式在 INSERT 、DELETE 、MERGE 和 UPDATE 操作期间指定索引的行为。
索引模式

DISABLED
数据库服务器不在修改基本表的 insert 、delete 和 update 操作之后更新索引。优化程序在查询执行期间不使用索引。
ENABLED
数据库服务器在修改基本表的 insert 、delete 和 update 操作之后更新索引。优化程序在查询执行期间使用索引。 如果 insert 或 update 操作导致复制键值添加到唯一索引,则语句失败。
FILTERING
数据库服务器在修改基本表的 insert 、delete 和 update 操作之后更新唯一索引。(此选项对复制索引不可用。)
优化程序在查询执行期间使用索引。如果在过滤方式中,插入或更新操作导致复制键值添加到唯一索引,则语句继续处理,但是坏行被写入与基本表相关联的违例表中。关于唯一索引违例的诊断信息被写入与基本表相关联的诊断表。
如果为唯一索引指定过滤,则您也可指定以下错误选项之一。
WITHOUT ERROR
插入或更新操作期间的唯一索引违例没有完整性违例错误返回给用户。
WITH ERROR
插入或更新操作期间的唯一索引违例完整性违例错误返回给用户。
有关变更唯一索引的数据库对象方式的信息,请参阅 约束和唯一索引的模式 。
为唯一索引指定方式
为 CREATE INDEX 语句中的唯一索引指定方式时必须遵守以下规则:
您可将唯一索引的方式设置为 enabled 、disabled 或 filtering 。
如果不指定方式,那么缺省情况下其它索引。
对于设置为过滤方式的索引,如果您不指定错误选项,则缺省为 WITHOUT ERROR 。
当您向现有的基本表添加新的唯一索引并为索引指定禁用方式时,CREATE INDEX 语句成功,即使索引的列中的复制值将导致唯一索引违例。
当向现有的基本表添加新的唯一索引并为索引指定启用或过滤方式时,CREATE INDEX 语句成功(倘若将导致唯一索引违例的索引的列中不存在复制值)。然而,如果索引的列中存在任何复制值,CREATE INDEX 语句失败并返回一个错误。
当向启用或过滤方式中现有的基本表添加新的唯一索引时,并且复制值存在于索引的列中,基本表中的错误行没有过滤到违例表中。这样,您无法使用违例表来监测基本表中的错误行。
当复制值存在于列中时添加唯一索引
如果您试图在启用方式中添加唯一索引但由于复制值在索引的列中而接收到错误信息,则采取以下步骤来成功添加索引:
1.在禁用方式中添加索引,再次发出 CREATE INDEX 语句,但是这次指定 DISABLED 关键字。
2.使用 START VIOLATIONS TABLE 语句为目标表启动违例和诊断表。
3.发出 SET Database Object Mode 语句来将索引方式更改为启用。当发出此语句时,违反唯一索引需要的目标表中的现有行在违例表中复制。然而,您接收到一个完整性违例的错误消息,并且索引保持禁用。
4.在违例表上发出 SELECT 语句来检索从目标表复制的不一致性。您可能需要连接违例表和诊断表来获取所有必要的信息。
5.在违反唯一索引需要的目标表中的行上采取更正操作。
6.修复目标表中所有不一致行之后,再次发出 SET Database Object Mode 语句俩奖金用的索引切换为启用方式。这次索引被启用,并且没有返回完整性违例错误。因为目标表中的所有行满足新的唯一索引需要。
为复制索引指定方式
当您在 CREATE INDEX 语句中为复制索引指定方式时必须遵守以下规则:
可将复制索引设置为启用或禁用方式。过滤方式仅限于唯一索引可用。
如果不指定复制索引方式,则缺省情况下索引是启用的。
数据库服务器如何对待禁用的索引
无论禁用的索引是唯一索引还是重复索引,实际上数据库服务器在数据操纵(DML)操作期间会忽略该索引。
当禁用索引时,数据库服务器停止更新索引并停止在查询期间使用索引,但是保留关于禁用索引的目录信息。如果在该列或列组上已经存在禁用索引,则您不能在列或列组上创建新的索引。类似地,如果活动的约束依赖的索引被禁用,则您不能在列或列组上创建活动的(启用的)唯一约束、外键约束或主键约束。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值