达梦数据库索引内容介绍

发布于:2024-10-10 ⋅ 阅读:(12) ⋅ 点赞:(0)

1、索引概念

索引是为了快速检索和定位数据行而创建的一种数据结构。索引是由表中索引列数据进行排序后的集合和指向这些值的物理标识(例如:ROWID 等聚集索引键)共同组成。在 DM 中,除了位图索引、位图连接索引、全文索引和空间索引外,索引数据都采用 B+ 树结构进行存储,在 DM 手册的其余地方都简称为 B 树。索引和表一样需要存储空间。
索引相当于一本书的目录,根据目录中的页码标识快速检索并定位到的查找内容。
索引可使 SQL 语句快速地定位到相关数据记录上。除了系统自动创建的聚集索引以外,其它索引均为可选项。
创建或删除一个索引,不会影响基表、数据库应用或其它索引。当插入、更改和删除相关表的行时,DM8 会自动管理索引。如果删除索引,所有的应用仍继续工作,但访问以前被索引了的数据时速度可能会变慢。

2、索引分类

2.1聚集索引和非聚集索引

从物理存储角度进行分类,可分为聚集索引和非聚集索引。
● 聚集索引(又称为一级索引、主索引):聚集索引就是按照聚集索引键构造一棵 B+ 树,表数据存储在 B+ 树叶子节点上,通过定位索引可直接在 B+ 树中找到数据。每一个表有且只有一个聚集索引。
● 非聚集索引(又称为二级索引、辅助索引):将二级索引列和聚集索引列共同存储在 B+ 树叶子节点上。如果查找非聚集索引键值或聚集索引键值可直接在 B+ 树中找到;如果查找索引键值以外的数据,则需要回到一级索引中进行查找。每一个表可以有多个非聚集索引。
首先创建一张表

SQL> CREATE TABLE T1 (ID int,NAME varchar(20),DEPARTMENT varchar(20));
操作已执行
已用时间: 5.613(毫秒). 执行号:613.
SQL> INSERT INTO T1 VALUES(1, 'A', 'A部');
影响行数 1

已用时间: 0.508(毫秒). 执行号:614.
SQL> INSERT INTO T1 VALUES(2, 'B', 'B部');
影响行数 1

已用时间: 0.384(毫秒). 执行号:615.
SQL> INSERT INTO T1 VALUES(3, 'C', 'C部');
影响行数 1

已用时间: 0.523(毫秒). 执行号:616.
SQL> INSERT INTO T1 VALUES(4, 'C', 'D部');
影响行数 1

已用时间: 0.527(毫秒). 执行号:617.
SQL> commit;
操作已执行
已用时间: 0.637(毫秒). 执行号:618.
SQL> select * from t1;

行号     ID          NAME DEPARTMENT
---------- ----------- ---- ----------
1          1           A    A部
2          2           B    B部
3          3           C    C部
4          4           C    D部

已用时间: 0.613(毫秒). 执行号:619.

创建并使用聚簇索引查询

SQL> CREATE CLUSTER INDEX idx_t_id_cls on T1(ID);
操作已执行
已用时间: 16.908(毫秒). 执行号:620.
SQL> CREATE CLUSTER INDEX idx_t_id_cls on T1(ID);
操作已执行
已用时间: 16.908(毫秒). 执行号:620.
SQL> EXPLAIN SELECT * FROM  T1 WHERE ID=2;

1   #NSET2: [1, 1, 112] 
2     #PRJT2: [1, 1, 112]; exp_num(4), is_atom(FALSE) 
3       #CSEK2: [1, 1, 112]; scan_type(ASC), IDX_T_ID_CLS(T1), scan_range[2,2]

已用时间: 0.704(毫秒). 执行号:0.

创建并使用非聚簇索引查询

SQL> CREATE INDEX idx_t_name_ncls on T1(NAME);
操作已执行
已用时间: 5.378(毫秒). 执行号:621.
SQL> EXPLAIN SELECT ID FROM  T1 WHERE NAME='C';

1   #NSET2: [1, 1, 64] 
2     #PRJT2: [1, 1, 64]; exp_num(2), is_atom(FALSE) 
3       #SSEK2: [1, 1, 64]; scan_type(ASC), IDX_T_NAME_NCLS(T1), scan_range['C','C'], is_global(0)

已用时间: 0.750(毫秒). 执行号:0.

2.2功能索引

从索引功能角度进行分类,可分为唯一索引、函数索引、位图索引、位图连接索引、全文索引、空间索引、数组索引、普通索引。
唯一索引:索引数据根据索引键唯一;
函数索引:包含函数/表达式的预先计算的值;
位图索引:对低基数的列创建位图索引;
位图连接索引:针对两个或者多个表连接的位图索引,主要用于数据仓库中;
全文索引:在表的文本列上而建的索引。具体内容请参考第 18 章;
空间索引:在空间数据上创建的索引,专用于 DMGEO 包中;
数组索引:在一个只包含单个数组成员的对象列上创建的索引;
普通索引:除了唯一索引、函数索引、位图索引、位图连接索引、全文索引、空间索引、数组索引以外的索引,均为普通索引。

2.3虚索引和实索引

从是否存储数据的角度进行分类,可分为虚索引和实索引。
虚索引
指不存储数据的索引。虚索引由系统自动并隐式地创建,目的是保证约束的正确性。
系统在下述情景中会自动创建一个虚索引:
情景1为普通表(非 HUGE 表)创建外键引用约束且未使用 WITH INDEX 时,系统自动创建一个不含数据的虚索引。
情景2为非事务型 HUGE 表创建 PRIMARY KEY 主键约束或 UNIQUE 唯一约束时,系统自动创建一个不含数据的虚索引。系统自动为 UNIQUE 约束创建的 UNIQUE 索引为虚索引,而用户手动通过 CREATE UNIQUE INDEX……语法创建的 UNIQUE 索引为实索引,同为 UNIQUE 索引但二者类型不同。
情景3当 DM.INI 参数 HUGE_UNIQUE_CHECK=0,为事务型 HUGE 表创建 PRIMARY KEY 主键约束或 UNIQUE 唯一约束时,系统自动创建一个不含数据的虚索引。
实索引
指存储数据的索引。虚索引以外的索引均为实索引。

2.4单列索引和复合索引

从索引键值的个数进行分类,可分为单列索引和复合索引。
单列索引
只有一个索引键的索引。
复合索引
含有多个索引键的索引。

2.5全局索引和局部索引

从分区的角度进行分类,可分为全局索引和局部索引。全局索引和局部索引均为二级索引,专门用于水平分区表中。
当分区子表个数较多、索引列的选择率较好、没有使用分区裁剪优化等因素时,执行计划会倾向于使用全局索引进行查询。但由于全局索引的日常维护成本高于局部索引。因此用户可根据实际应用场景权衡利弊之后再在全局索引和局部索引中进行选择。

  • 1.全局索引:全局索引是以整张表的数据为对象而建立的索引
    指定 GLOBAL 关键字创建的索引即为全局索引。创建全局索引时,会在水平分区表的主表上创建全局索引和在每个子表上创建全局本地索引。索引数据存储在全局索引上。全局本地索引的命名规则为:INDEX+ 全局本地索引 ID_全局索引 ID。例如:全局索引 IDX1 的 ID 为 3504,全局本地索引的 ID 为 3506,那么全局本地索引的名称为 INDEX3506_3504。
    全局索引具体分为两种:全局非分区索引和全局分区索引。指定了 <PARTITION 子句 > 的索引即为分区索引。只有 DMDPC 功能支持分区索引。
SQL> create table t2(c1 int, c2 int, c3 int)  partition by range(c1)
2   (
3       partition p1 values less than(100),
4       partition p2 values less than(200),
5   partition p3 values less than(maxvalue)
6   );
操作已执行
已用时间: 5.714(毫秒). 执行号:622.
SQL> create index idx1 on t2(c2) global;
操作已执行
已用时间: 10.486(毫秒). 执行号:623.
SQL> explain select * from t2 where c2 = 130;

1   #NSET2: [1, 1, 24] 
2     #PRJT2: [1, 1, 24]; exp_num(4), is_atom(FALSE) 
3       #PARALLEL: [1, 1, 24]; scan_type(FULL), key_num(0, 0, 0), simple(0)
4         #BLKUP2: [1, 1, 24]; IDX1(T2)
5           #SSEK2: [1, 1, 24]; scan_type(ASC), IDX1(T2), scan_range[130,130], is_global(1)

已用时间: 1.011(毫秒). 执行号:0.
SQL> explain select * from t2_p1 where c2 = 130;

1   #NSET2: [1, 1, 24] 
2     #PRJT2: [1, 1, 24]; exp_num(4), is_atom(FALSE) 
3       #BLKUP2: [1, 1, 24]; INDEX33555622_33555621(T2_P1)
4         #SSEK2: [1, 1, 24]; scan_type(ASC), INDEX33555622_33555621(T2_P1), scan_range[130,130], is_global(1)

已用时间: 0.672(毫秒). 执行号:0.
  • 2.局部索引:局部索引是在分区表的每个分区上创建的索引
    未指定 GLOBAL 关键字创建的索引即为局部索引。局部索引暂时不支持分区。创建局部索引时,会在水平分区表的主表上创建局部索引和在每个子表上创建子表局部索引。索引数据存储在子表局部索引上。
SQL> create table t3(c1 int, c2 int, c3 int)  partition by range(c1)
2   (
3       partition p1 values less than(100),
4       partition p2 values less than(200),
5   partition p3 values less than(maxvalue)
6   );
操作已执行
已用时间: 6.729(毫秒). 执行号:624.
SQL> create index idx_t3 on t3(c2);
操作已执行
已用时间: 12.700(毫秒). 执行号:625.
SQL> explain select * from t3 where c2 = 130;

1   #NSET2: [1, 1, 24] 
2     #PRJT2: [1, 1, 24]; exp_num(4), is_atom(FALSE) 
3       #PARALLEL: [1, 1, 24]; scan_type(FULL), key_num(0, 0, 0), simple(0)
4         #BLKUP2: [1, 1, 24]; IDX_T3(T3)
5           #SSEK2: [1, 1, 24]; scan_type(ASC), IDX_T3(T3), scan_range[130,130], is_global(0)

已用时间: 1.115(毫秒). 执行号:0.
SQL> explain select * from t3_p1 where c2 = 130;

1   #NSET2: [1, 1, 24] 
2     #PRJT2: [1, 1, 24]; exp_num(4), is_atom(FALSE) 
3       #BLKUP2: [1, 1, 24]; INDEX33555630_33555629(T3_P1)
4         #SSEK2: [1, 1, 24]; scan_type(ASC), INDEX33555630_33555629(T3_P1), scan_range[130,130], is_global(0)

已用时间: 0.643(毫秒). 执行号:0.

3、索引管理规则

索引是与表相关的可选的结构(聚集索引除外),它能使对应于表的 SQL 语句执行得更快,因为有索引比没有索引能更快地定位信息。DM8 索引能提供访问表的数据的更快路径,可以不用重写任何查询而使用索引,其结果与不使用索引是一样的,但速度更快。
DM8 提供了几种最常见类型的索引,对不同场景有不同的功能,它们是:
1.聚集索引:每一个普通表有且只有一个聚集索引;
2.唯一索引:索引数据根据索引键唯一;
3.函数索引:包含函数/表达式的预先计算的值;
4.位图索引:对低基数的列创建位图索引;
5.位图连接索引:针对两个或者多个表连接的位图索引,主要用于数据仓库中;
6.全文索引:在表的文本列上而建的索引。
索引在逻辑上和物理上都与相关的表的数据无关,作为无关的结构,索引需要存储空间。创建或删除一个索引,不会影响基本的表、数据库应用或其他索引。当插入、更改和删除相关的表的行时,DM8 会自动管理索引。如果删除索引,所有的应用仍继续工作,但访问以前被索引了的数据时速度可能会变慢。

3.1在表中插入数据后创建索引

一般情况下,在插入或装载了数据后,为表创建索引会更加有效率。如果在装载数据之前创建了一个或多个索引,那么在插入每行时 DM8 都必须更改和维护每个索引,使得插入效率降低。

3.2索引创建准则

1.如果需要经常地检索大表中的少量的行,就为查询键创建索引;
2.为了改善多个表的连接的性能,可为连接列创建索引;
3.主键和唯一键自动具有索引,在外键上很多情况下也创建索引;
4.小表不需要索引。
选取表中的索引列时可以考虑以下几点:
1.列中的值相对比较唯一 ;
2.取值范围大,适合建立索引;
3.CLOB 和 TEXT 只能建立全文索引、BLOB 不能建立任何索引。

3.3为性能而安排索引列

在 CREATE INDEX 语句中列的排序会影响查询的性能。通常,将最常用的列放在最前面。
如果查询中有多个字段组合定位,则不应为每个字段单独创建索引,而应该创建一个组合索引。当两个或多个字段都是等值查询时,组合索引中各个列的前后关系是无关紧要的。但是如果是非等值查询时,要想有效利用组合索引,则应该按等值字段在前,非等值字段在后的原则创建组合索引,查询时只能利用一个非等值的字段。

3.4限制每个表的索引的数量

一个表可以有任意数量的索引。但是,索引越多,修改表数据的开销就越大。当插入或删除行时,表上的所有索引也要被更改;更改一个列时,包含该列的所有索引也要被更改。因此,在从表中检索数据的速度和更新表的速度之间有一个折衷。例如,如果一个表主要仅用于读,则索引多就有好处;如果一个表经常被更新,则索引不宜多建。

3.5估计索引大小和设置存储参数

创建索引之前先估计索引的大小能更好地促进规划和管理磁盘空间。可以用索引以及回滚段、重做日志文件的组合估计的大小来决定支持所期望的数据库所需的磁盘空间的大小。通过这些估计,就可以购买合适的硬件和做出其他正确的决定。
用单个索引估计的大小能更好地管理索引使用的磁盘空间。创建索引时,可以设置适当的存储参数,并改善使用该索引的应用的 I/O 性能。例如,假设在创建索引之前估计索引的最大大小,之后就可以在创建该索引时设置适当的存储参数,就能很少为表的数据段分配簇。并且,所有的该索引的数据都被保存在相对连续的磁盘空间扇区中,这就减少了使用该索引的磁盘 I/O 操作所需的时间。

3.6为每个索引指定表空间

可以在除临时表空间、日志表空间和回滚段表空间外的其他任何表空间中创建索引,也可以在其索引的表的相同或不同的表空间中创建索引。如果表及其索引使用相同的表空间 能更方便地对数据库进行管理(如表空间或文件备份)或保证应用的可用性,因为所有有关的数据总是在一起联机。然而,将表及其索引放在不同的表空间(在不同磁盘上)产生的性能比放在相同的表空间更好,因为这样做减少了磁盘竞争。但是将表及其索引放在不同的表空间时,如果一个表上某索引所在的表空间脱机了,则涉及这张表的 SQL 语句可能由于执行计划仍旧需要使用被脱机的索引而不能成功执行。

4、创建索引

4.1显示的创建索引

4.1.1创建聚集索引

创建聚簇索引条件:
1.每张表中只允许有一个聚集索引,如果之前已经指定过 CLUSTER INDEX 或者指定了 CLUSTER PK,则用户新建立 CLUSTER INDEX 时系统会自动删除原先的聚集索引。但如果新建聚集索引时指定的创建方式(列,顺序)和之前的聚集索引一样,则会报错;
2.指定 CLUSTER INDEX 操作需要重建表上的所有索引,包括 PK 索引;
3.删除聚集索引时,缺省以 ROWID 排序,自动重建所有索引;
4.若聚集索引是默认的 ROWID 索引,不允许删除;
5.聚集索引不能应用到函数索引中;
6.不能在列存储表上新建/删除聚集索引;
7.建聚集索引语句不能含有 partition_clause 子句;
8.在临时表上增删索引会使当前会话上临时 b 树数据丢失;
9.不支持在含有多媒体类型的表上新建聚集索引。

SQL> CREATE CLUSTER INDEX cls_emp_name ON emp(EMPLOYEE_NAME);
操作已执行
已用时间: 24.663(毫秒). 执行号:627.

4.1.2创建唯一索引

SQL> CREATE UNIQUE INDEX emp_unique_index ON emp (EMPLOYEE_ID) STORAGE (ON idx);
操作已执行
已用时间: 6.075(毫秒). 执行号:628.

4.1.3创建基于函数的索引

基于函数的索引促进了限定函数或表达式的返回值的查询,该函数或表达式的值被预先计算出来并存储在索引中。正确使用函数索引,可以带来以下好处:
1.创建更强有力的分类,例如可以用 UPPER 和 LOWER 函数执行区分大小写的分类;
2.预先计算出计算密集的函数的值,并在索引中将其分类。可以在索引中存储要经常访问的计算密集的函数,当需要访问值时,该值已经计算出来了。因此,极大地改善了查询的执行性能;
3.增加了优化器执行范围扫描而不是全表扫描的情况的数量。

SQL> CREATE INDEX idx_func_emp ON emp(EMPLOYEE_ID + MANAGER_ID);
操作已执行
已用时间: 6.083(毫秒). 执行号:629.

创建函数索引有以下约束条件:
1.表达式不允许为时间间隔类型;
2.表达式中不允许出现半透明加密列;
3.函数索引表达式的长度理论值不能超过 816 个字符(包括生成后的指令和字符串);
4.函数索引不能为 CLUSTER 或 PRIMARY KEY 类型;
5.表达式不支持集函数和不确定函数,不确定函数为每次执行得到的结果不确定,系统中不确定函数包括:RAND、SOUNDEX、CURDATE、CURTIME、CURRENT_DATE、CURRENT_TIME、CURRENT_TIMESTAMP、GETDATE、NOW、SYSDATE、CUR_DATABASE、DBID、EXTENT、PAGE、SESSID、UID、USER、VSIZE、SET_TABLE_OPTION、SET_INDEX_OPTION、UNLOCK_LOGIN、CHECK_LOGIN、GET_AUDIT、CFALGORITHMSENCRYPT、SF_MAC_LABEL_TO_CHAR、CFALGORITHMSDECRYPT、BFALGORITHMSENCRYPT、SF_MAC_LABEL_FROM_CHAR、BFALGORITHMSDECRYPT、SF_MAC_LABEL_CMP;
6.快速装载不支持含有函数索引的表;
7.若函数索引中要使用用户自定义的函数,则函数必须是指定了 DETERMINISTIC 属性的确定性函数;
8.若函数索引中使用的确定性函数发生了变更或删除,用户需手动重建函数索引;
9.若函数索引中使用的确定性函数内有不确定因素,会导致前后计算结果不同的情况。在查询使用函数索引时,使用数据插入函数索引时的计算结果为 KEY 值;修改时可能会导致在使用函数索引过程中出现根据聚集索引无法在函数索引中找到相应记录的情况,对此进行报错处理;
10.临时表不支持函数索引。

4.1.4创建位图索引

位图索引主要针对含有大量相同值的列而创建。位图索引被广泛引用到数据仓库中,创建方式和普通索引一致,对低基数(不同的值很少)的列创建位图索引,能够有效提高基于该列的查询效率。且执行查询语句的 where 子句中带有 AND 和 OR 谓词时,效率更加明显。

SQL>  CREATE BITMAP INDEX idx_bm_emp ON emp(JOB_ID);
操作已执行
已用时间: 10.244(毫秒). 执行号:632.

位图索引具有以下约束:
1.支持普通表、堆表和水平分区表创建位图索引;
2.不支持对大字段创建位图索引;
3.不支持对计算表达式列创建位图索引;
4.不支持在 UNIQUE 列和 PRIMARY KEY 上创建位图索引;
5.不支持对存在 CLUSTER KEY 的表创建位图索引;
6.仅支持单列或者不超过 63 个组合列上创建位图索引;
7.MPP 环境下不支持位图索引的创建;
8.不支持全局位图索引;
9.包含位图索引的表不支持并发的插入、删除和更新操作。

4.1.5创建位图连接索引

位图连接索引是一种提高通过连接实现海量数据查询效率的有效方式,主要用于数据仓库环境中。区别于上一节所说的建立在单表上的位图索引,位图连接索引是针对两个或者多个表的连接而建立的位图索引,同时保存了连接的位图结果。对于索引列中的每一个值,位图连接索引在索引表中保存了对应行的 ROWID。

SQL> create bitmap index SALES_CUSTOMER_NAME_IDX  on SALES.SALESORDER_HEADER(SALES.CUSTOMER.PERSONID)
2   from SALES.CUSTOMER, SALES.SALESORDER_HEADER  where  SALES.CUSTOMER.CUSTOMERID = SALES.SALESORDER_HEADER.CUSTOMERID;
操作已执行
已用时间: 18.883(毫秒). 执行号:633.

1.适用于常规索引的基本限制也适用于位图连接索引;
2.用于连接的列必须是维度表中的主键或存在唯一约束;如果是复合主键,则必须使用复合主键中的所有列;
3.当多个事务同时使用位图连接索引时,同一时间只允许更新一个表;
4.连接索引创建时,基表只允许出现一次;
5.不允许对存在 cluster key 的表创建位图连接索引;
6.位图连接索引表(内部辅助表,命名为 BMJ$_索引名)仅支持 select 操作,其他操作都不支持:如 insert、delete、update、alter、drop 和建索引等;
7.不支持对位图连接索引所在事实表和维度表的备份还原,不支持位图连接索引表的表级备份还原;
8.不支持位图连接索引表、位图连接索引以及虚索引的导出导入;
9.位图连接索引及其相关表不支持快速装载;
10.位图连接索引名称的长度限制为:事实表名的长度 + 索引名称长度 +6<128;
11.仅支持普通表、堆表和 HUGE 表;
12.WHERE 条件只能是列与列之间的等值连接,并且必须含有所有表;
13.事实表上聚集索引和位图连接索引不能同时存在;
14.不支持对含有位图连接索引的表中的数据执行 DML,如需要执行 DML,则先删除该索引;
15.含有位图连接索引的表不支持下列 DDL 操作:删除、修改表约束,删除、修改列,修改表名。另外,含位图连接索引的堆表不支持添加列操作;
16.不允许对含有位图连接索引的表并发操作;
17.创建位图连接索引时,在存储参数中可指定存储位图的字节数,有效值为:1~128,服务器自动校正为 4 的倍数,默认值为 48。如 STORAGE(SECTION(4)),表示使用 4 个字节存储位图信息。

4.2隐式的创建索引

隐式创建方式只支持创建唯一索引。
DM8 通过在唯一键或主键上创建一个唯一索引来在表上实施 UNIQUE KEY 或 PRIMARY KEY 完整性约束。当启用约束时 DM8 自动创建该索引。如下面的语句会自动在表 emp 的 name 列上创建一个唯一索引。此处隐式创建的唯一索引是包含索引数据的实索引。

SQL> CREATE TABLE T1(C1 INT, C2 INT, C3 INT);
操作已执行
已用时间: 2.246(毫秒). 执行号:634.
SQL> ALTER TABLE T1 ADD CONSTRAINT PK_EMP_NAME PRIMARY KEY (C1);
操作已执行
已用时间: 5.904(毫秒). 执行号:635.
SQL> SELECT INDEX_NAME FROM ALL_CONSTRAINTS WHERE CONSTRAINT_NAME='PK_EMP_NAME'; 

行号     INDEX_NAME   
---------- -------------
1          INDEX33555647

已用时间: 11.670(毫秒). 执行号:636.
SQL> SELECT UNIQUENESS FROM ALL_INDEXES WHERE INDEX_NAME='INDEX33555548';

行号     UNIQUENESS
---------- ----------
1          NONUNIQUE

已用时间: 12.670(毫秒). 执行号:637.

5、重建索引
当一个表经过大量的增删改操作后,表的数据在物理文件中可能存在大量碎片,从而影响访问速度。另外,当删除表的大量数据后,若不再对表执行插入操作,索引所处的段可能占用了大量并不使用的簇,从而浪费了存储空间。
可以使用重建索引来对索引的数据进行重组,使数据更加紧凑,并释放不需要的空间,从而提高访问效率和空间效率。
重建索引方法:
SP_REBUILD_INDEX(SCHEMA_NAME varchar(256), INDEX_ID int);

SQL> select INDEX_NAME,INDEX_TYPE,TABLE_OWNER,TABLE_NAME from user_indexes;

行号     INDEX_NAME    INDEX_TYPE TABLE_OWNER TABLE_NAME  
---------- ------------- ---------- ----------- ------------
1          IDX_BM_EMP    BITMAP     LEI         EMP
2          IDX_ID_EMP    NORMAL     LEI         EMP
3          INDEX33555647 NORMAL     LEI         T1
4          INDEX33555640 CLUSTER    LEI         EMP
5          INDEX33555642 CLUSTER    LEI         BM$_33555641
6          INDEX33555646 CLUSTER    LEI         T1

6 rows got
SQL>  select name,id,subtype$ from sysobjects where name='IDX_ID_EMP';

行号     NAME       ID          SUBTYPE$
---------- ---------- ----------- --------
1          IDX_ID_EMP 33555649    INDEX

已用时间: 0.875(毫秒). 执行号:646.
SQL> SP_REBUILD_INDEX('LEI','33555649');
DMSQL 过程已成功完成
已用时间: 3.836(毫秒). 执行号:647.
SQL> alter index lei.IDX_ID_EMP rebuild;
操作已执行
已用时间: 5.787(毫秒). 执行号:648.
SQL> alter index lei.IDX_ID_EMP rebuild online;
操作已执行
已用时间: 11.089(毫秒). 执行号:649.

6、查看索引信息

创建索引后,可以通过 INDEXDEF 系统函数查看索引的定义。
INDEXDEF(INDEX_ID int, PREFLAG int);

SQL> select INDEXDEF(33555649, 0);

行号     INDEXDEF(33555649,0)                                                                              
---------- --------------------------------------------------------------------------------------------------
1          CREATE OR REPLACE  INDEX "IDX_ID_EMP" ON "EMP"("EMPLOYEE_ID" ASC) STORAGE(ON "MAIN", CLUSTERBTR) ;

已用时间: 0.850(毫秒). 执行号:651.
SQL> select INDEXDEF(33555641, 0);

行号     INDEXDEF(33555641,0)                                                                                
---------- ----------------------------------------------------------------------------------------------------
1          CREATE OR REPLACE BITMAP  INDEX "IDX_BM_EMP" ON "EMP"("JOB_ID" ASC) STORAGE(ON "MAIN", CLUSTERBTR) ;

已用时间: 0.764(毫秒). 执行号:652.

7、删除索引

SQL> drop index IDX_BM_EMP;
操作已执行
已用时间: 20.596(毫秒). 执行号:653.
SQL> drop index if exists fadjflaeljw;
操作已执行
已用时间: 0.559(毫秒). 执行号:654.

更多内容请参考:https://eco.dameng.com