创建索引

要创建索引,必须是相应的物理表的所有者或者是系统管理员。在表上创建或者重建索引的时候,不允许在表上面做更新的DDL操作,即在创建或者重建索引的时候不允许在相应的物理表上面进行插入删除或者更新的操作。

同一模式下,表、索引、视图、序列不能同名。

  • 显式地创建一个索引

可以用CREATE INDEX 语句显式的创建一个索引。如下语句在表student表中的stuid上面创建一个stu_idx的索引:

CREATE INDEX stu_idx ON student(stuid)
TABLESPACE system INIT 64K NEXT 64K FILL 70 SPLIT 50;

以上创建索引语句为索引指定了几个存储参数(INIT,NEXT,FILL,SPLIT)和表空间(system)。如果没有指定这些参数,就使用系统默认的表空间和默认的存储参数

  • 显示地创建唯一性索引

索引可以式唯一性的也可以是非唯一性的。唯一性索引可以保证在建立索引的属性列键值组合上面不会有重复的值。非唯一性则没有这个限制。

可以用CREATE UNIQUE INDEX语句来创建唯一性索引,如

CREATE UNIQUE INDEX stu_idx ON student(stuid);

也就是说,可以在预期的列上定义UNIQUE完整性约束,神通数据库系统会自动的在唯一键上面定义一个唯一性索引来保证UNIQUE完整性约束。但是,如果为提高查询性能而建立索引,包括唯一性索引,最好是采用显式的创建方式,这样可以根据实际应用情况确定存储参数和保证连续的存储空间。

  • 创建与约束关联的索引

神通数据库可以通过在唯一键或主键上创建一个唯一索引,来实现表上面的UNIQUE KEY或者PRIMARY KEY完整性约束。当发出有这样的约束条件CREATE TABLE语句的时候,系统就会自动创建一个唯一性的索引。对PRIMARY KEY可以通过USING INDEX来指定创建索引的表空间。如CREATE TABLE中有一个PRIMARY KEY约束,并指定相关的表空间选项:

CREATE TABLE student(
stu_id int,
stu_name char(20),
stu_address char(20),
PRIMARY KEY(stu_id) USING INDEX student_pkey TABLESPACE system);

以上的创建索引语句指定了索引的存储的表空间,如果不指定,则使用默认的表空间。

  • 合并索引

当应用所发出的查询都包含多个列但是这些列却分别建立了不同的索引。例如,Col1和Col2总是同时访问,而这两个属性上分别建立了索引,这个时候就必须考虑合并索引。可以对合并后的索引重新指定存储参数和表空间,如果不指定,使用默认的存储参数和表空间。如物理表COURSE的模式为:

CREATE TABLE COURSE(C_ID INT, CT_ID INT, C_NAME CHAR(20) , C_CLASS CHAR(20));

现在在课程的唯一标识C_ID和授课教师的ID列CT_ID上面有两个索引,但是应用总是使用到C_ID和CT_ID两个属性列,这个时候就可以合并这两个索引以提高访问性能。可以通过下面的语句实现:

CREATE INDEX c_i_tid_i ON c_i FROM c_i_i, c_t_tid TABLESPACE system INIT 64K NEXT 64K FILL 70 SPLIT 50;