南大通用GBase8s 常用SQL语句(四十七)

南大通用GBase8s 常用SQL语句(四十七)
CREATE INDEX 语句
使用 CREATE INDEX 语句为表中的一列或多列,或者使用列作为参数的 UDR 返回的值创建索引。
该语句是 SQL ANSI/ISO 标准的扩展。
语法

索引选项

元素 描述 限制 语法
index 在此为新的索引声明名称 在数据库中的索引名称中必须唯一 标识符
synonym, table 要建立索引的标准或临时 table 的名称或者同义词 同义词以及其表必须存在于当前数据库中 标识符
用法
当发出 CREATE INDEX 语句时,表在互斥方式下锁定。如果另一个过程正在使用表,CREATE INDEX 返回一个错误。(然而,关于异常,请参阅 CREATE INDEX 的 ONLINE 关键字。)
如果索引在存储加密数据的列上,则数据库服务器不能使用该索引。
如果包含了可选的 IF NOT EXISTS 关键字,当指定名称的索引已在当前数据库内的指定的表中定义时,则数据库服务器不采取任何操作(而不是向应用程序发送异常)。
索引使用当 CREATE INDEX 执行时生效的对照。
辅助存取方法(有时称为 索引存取方法)是一组构建、存取和操作索引结构(如 B-tree 、R-tree 或 DataBlade 模块提供的索引结构)以加速数据检索的数据库服务器函数。
synonym 或 table 都不可以参考虚拟表或 CREATE EXTERNAL TABLE 语句定义的表对象。
您不能直接在内置函数中预定函数型索引,但是可以创建一个 SPL 包装器以调用并返回内置函数的值。此用户定义函数的参数定义了值不能是来自结合数据类型的列的函数型索引。
以下统计信息由带或不带 ONLINE 关键字的 CREATE INDEX 语句自动生成:
索引级别统计信息,等价于 B-tree 索引以 LOW 方式在 UPDATE STATISTICS 操作中生成的统计信息。
列分布存储统计信息,等价于一般的 B-tree 索引的非透明主索引列以 HIGH 方式在 UPDATE STATISTICS 操作中生成的分布存储。
索引类型选项
使用 CREATE INDEX 语句的 DISTINCT 或 UNIQUE 和 CLUSTER 选项指定索引的特征。
索引类型选项
DISTINCT 指定索引所基于的列仅接受唯一数据。
UNIQUE 指定索引所基于的列仅接受唯一数据。
CLUSTER 按索引指定的顺序对表的行重新排序。
UNIQUE 或 DISTINCT 选项用法
如果您未指定 UNIQUE 或 DISTINCT 关键字,则该索引在被索引的列或者被索引的列集上允许重复的值。
带有唯一索引的列至多可有一个 NULL 值。
您不能为 UNIQUE 索引键指定 R-tree 辅助存取方法。
以下示例创建了一个唯一索引,防止 customer_num 列出现重复值:
CREATE UNIQUE INDEX c_num_ix ON customer (customer_num);
DISTINCT 和 UNIQUE 关键字是同义词,所以以下语句与前面的示例具有相同的作用:
CREATE DISTINCT INDEX c_num_ix ON customer (customer_num);
两个示例中的索引维持在升序中,这是缺省顺序。下一个示例在同一列上定义了一个名为 c_num_desc_ix 的唯一降序索引:
CREATE UNIQUE INDEX c_num_desc_ix ON customer (customer_num DESC);
您也可以通过创建带有 CREATE TABLE 的唯一约束或 ALTER TABLE 语句 的 ADD CONSTRAINT 子句来阻止列或列组中的复制。
在一个 NLSCASE INSENSITIVE 数据库中,NCHAR 和 NVARCHAR 数据类型列上的索引忽视字母大小写差异,以致于数据库服务器将由相同字母序列组成的不同大小写的字符串视为重复值。如果新行中列值与同一表中现有行同一列的值的不同之处仅在于大小写,则您不能向具有 NCHAR 或 NVARCHAR 列并在其列定义了唯一约束或唯一索引的表中插入行或更改该表的行。有关带有 NLSCASE INSENSITIVE 属性的数据库的更多信息,请参阅 在 NLSCASE INSENSITIVE 数据库中重复的行 和 在区分大小写的数据库中的 NCHAR 和 NVARCHAR 表达式 。
CLUSTER 选项用法
您不能在同一语句中同时指定 CLUSTER 选项和 ONLINE 关键字。此外,一些辅助存取方法(如 R-tree )不支持集群。在您为索引指定 CLUSTER 之前,请确保它使用支持集群的存取方法。
如果同一表上已存在 CLUSTER 索引,则 CREATE CLUSTER INDEX 语句失败。
CREATE CLUSTER INDEX c_clust_ix ON customer (zipcode);
该语句在 customer 表上创建了一个索引,并按行的邮政编码对行做物理的升序(缺省的)排序。
如果指定了 CLUSTER 选项并且数据中存在分片,则仅在每个分片内集群数据值,而非在整个表全局集群数据值。
如果 CREATE CLUSTER INDEX 语句还包含 COMPRESSED 关键字作为存储选项,则数据服务器发出错误 -26950 。要创建支持压缩的聚簇索引,需要两步:
使用 CREATE CLUSTER INDEX 语句定义不带索引压缩的集群索引。
调用带有 ‘index compress’ 参数的 SQL 管理 API task( ) 或 admin( ) 函数压缩现有的聚簇索引。
您不能在树索引的集群中使用 CLUSTER 选项。
索引是如何影响主键、唯一和引用约束的
数据库服务器为主键、唯一和引用约束创建内部 B-tree 索引。如果创建表之后添加了主键、唯一或引用约束,则在受约束的列使用用户创建的索引(如果合适)。
适当的索引是索引与在主键、引用或唯一约束中使用的相同的列的索引。
如果适当的用户创建的索引不可用,则数据库服务器在约束列或列组上创建未分片的内部索引。
索引键规范
使用 CREATE INDEX 语句的索引键规范定义索引的键值。它也可以指定升序或降序顺序和运算符类。
这是索引键规范的语法:
索引键规范

元素 描述 限制 语法
column 对此索引用作键的列 请参阅将列作为索引键的限制。 标识符
function 对此索引用作键的用户定义函数 必须为不返回大对象数据类型的非变量函数。不能是内置代数、指数、日志或十六进制函数。 标识符
func_col 值作为函数参数的列 不能是集合数据类型。请参阅使用函数的返回值作为索引键。 标识符
op_class 与此索引键的列或函数相关联的运算符类 如果 USING 子句中的辅助存取方法没有缺省运算符类,则您必须在此指定一个。(请参阅 使用运算符类。) 标识符
索引键值可为包含内置数据类型的一个或多个列。如果指定多个列,列集合中的值并置将被作为索引的单个组合列。
索引键值也可以是下面几种列之一:
LVARCHAR(size)类型的列,如果 size 小于 387 字节
包含用户定义的数据类型的一个或多个列
用户定义的函数返回的一个或多个 值(称为函数型索引),UDF 的参数列表是同一行中一个或多个列值
一列或多列的值和来自一个或多个用户定义函数返回值的组合
387 子字节的 LVARCHAR 大小限制是 dbspaces 的缺省页大小(2 千字节),但是大的页大小的 dbspace 不支持大索引键大小,如下表所示。
页大小 最大索引键大小
2 千字节 387 字节
4 千字节 796 字节
8 千字节 1,615 字节
12 千字节 2,435 字节
16 千字节 3,245 字节
指定排列顺序
缺省情况下,索引按升序顺序排序,从最小值到最大值,根据区域设置的排列顺序,或者如果 SET COLLATION 语句指定了非缺省排列顺序,根据创建索引时生效的顺序。您可以使用 DESC 关键字颠倒此排列顺序,以致于索引按最大值到最小值排序。
如果您在索引键规范中显式地指定 ASC 关键字,则该索引按照升序顺序排序。
指定运算符类
如果在 USING 子句中的辅助存取方法没有缺省的运算符类,则索引键规范可以为此索引指定运算符类。
如果在 USING 子句中的辅助存取方法有缺省的运算符类,则索引键规范可以为此索引指定覆盖此缺省运算符类的运算符类。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值