一、管理索引
1.索引定义语句
为了提高系统的查询效率,DM 系统提供了索引。但也需要注意,索引会降低那些影响 索引列值的命令的执行效率,如 INSERT、UPDATE、DELETE 的性能,因为 DM 不但要维护 基表数据还要维护索引数据。
语法格式
CREATE [OR REPLACE] [CLUSTER|NOT PARTIAL][UNIQUE | BITMAP| SPATIAL] INDEX <索引名>
ON [<模式名>.]<表名>(<索引列定义>{
,<索引列定义>}) [GLOBAL] [<STORAGE 子句>] [NOSORT] [ONLINE] [REVERSE];
<索引列定义>::= <索引列表达式>[ASC|DESC]
<STORAGE 子句>::=<STORAGE 子句 1>|<STORAGE 子句 2>
<STORAGE 子句 1>::= STORAGE(<STORAGE1 项> {
,<STORAGE1 项>})
<STORAGE1 项> ::=
[INITIAL <初始簇数目>] | [NEXT <下次分配簇数目>] | [MINEXTENTS <最小保留簇数目>] | [ON <表空间名>] |
[FILLFACTOR <填充比例>]|
[BRANCH <BRANCH 数>]|
[BRANCH (<BRANCH 数>, <NOBRANCH 数>)]|
[NOBRANCH ]|
[<CLUSTERBTR>]|
[SECTION (<区数>)]|
[STAT NONE]
<STORAGE 子句 2>::= STORAGE(<STORAGE2 项> {
,<STORAGE2 项>})
<STORAGE2 项> ::= [ON <表空间名>]|[STAT NONE]
参数
1. UNIQUE 指明该索引为唯一索引;
2. BITMAP 指明该索引为位图索引;
3. SPATIAL 指明该索引为空间索引;
4. CLUSTER 指明该索引为聚簇索引(也叫聚集索引),不能应用到函数索引中;
5. NOT PARTIAL 指明该索引为非聚簇索引,缺省即为非聚簇索引;
6. <索引名> 指明被创建索引的名称,索引名称最大长度128字节;
7. <模式名> 指明被创建索引的基表属于哪个模式,缺省为当前模式;
8. <表名> 指明被创建索引的基表的名称;
9. <索引列定义> 指明创建索引的列定义。其中空间索引列的数据类型必须是DMGEO包内的空间类型,如ST_GEOMETRY等;
10. <索引列表达式> 指明被创建的索引列可以为表达式;
11. GLOBAL 指明该索引为全局索引,仅堆表的水平分区表支持该选项,非水平分区表忽略该选项。堆表上的PRIMARY KEY会自动变为全局索引;
12. ASC 递增顺序;
13. DESC 递减顺序;
14. <STORAGE子句>普通表的索引参考<STORAGE子句1>,HUGE表的索引参考<STORAGE子句2>;
15. <STORAGE子句1>中,BRANCH和NOBRANCH只能用以指定聚集索引;
16. NOSORT 指明该索引相关的列已按照索引中指定的顺序有序,不需要在建索引时排序,提高建索引的效率。若数据非有序却指定了NOSORT,则在建索引时会报错;
17. ONLINE 表示支持异步索引,即创建索引过程中可以对索引依赖的表做增、删、改操作。
18. REVERSE 表示将当前索引创建为反向索引,即按索引数据的原始数据的反向排列 顺序创建索引。(缺省为按原始数据的正向排列顺序创建索引)
语句功能
供 DBA 或该索引所属基表的拥有者且具有 CREATE INDEX 权限的用户定义索引。
使用说明
1. <索引名>不得与该模式中其它索引的名字相同;
2. 索引列不得重复出现且数据类型不得为多媒体数据类型、类类型和自定义类型;
3. 索引列最多不能超过63列;
4. 可以使用STORAGE子句指定索引的存储信息,它的参数说明参见CREATE TABLE语句;
5. 索引的默认表空间与其基表的表空间一致;
6. 索引的模式名与其基表的模式名一致;
7. 索引各字段值相加得到的记录内总数据值长度不得超过页大小的1/4,二级索引各字段值相加得到的记录内总数据值长度则不能超过min(页大小1/4 , 3000);
8. 在下列情况下,DM利用索引可以提高性能:
1) 用指定的索引列值来搜索记录;
2) 用索引列的顺序来存取基表。
9. 每张表中只允许有一个聚集索引,如果之前已经指定过CLUSTER INDEX或者指定了CLUSTER PK,则用户新建立CLUSTER INDEX时系统会自动删除原先的聚集索引。但如果新建聚集索引时指定的创建方式(列,顺序)和之前的聚集索引一样,则会报错;
10. 列存储表(HUGE表)和堆表不允许建立聚集索引;
11. 指定CLUSTER INDEX操作需要重建表上的所有索引,包括PK索引;
12. 删除聚集索引时,缺省以ROWID排序,自动重建所有索引;
13. 本地索引:其分区方式与其所在基础表的分区方式一模一样的索引。本地索引的每个分区仅对应于其所在基础表的一个分区;
14. 函数索引:创建方式与普通索引一样,并且支持UNIQUE和STORAGE设置项,对于 以表达式为过滤的查询,创建合适的函数索引会提升查询效率;函数索引具有以下约束:
1) 表达式可以由多列组成,不同的列不能超过 63 个;
2) 表达式里面不允许出现大字段和时间间隔类型列;
3) 不支持建立分区函数索引;
4) 函数索引表达式的长度理论值不能超过 816 个字符(包括生成后的指令和字符串);
5) 函数索引不能为 CLUSTER 或 PRIMARY KEY 类型;
6) 表达式不支持集函数和不确定函数,不确定函数为每次执行得到的结果不确定,系统中不确定函数包括:RAND、SOUNDEX、CURDATE、CURTIME、CURRENT_DATE、CURRENT_TIME、CURRENT_TIMESTAMP、GETDATE、NOW、SYSDATE、CUR_DATABASE、DBID、EXTENT、PAGE、