赞
踩
作为一个达梦的初学者,写这篇文章的目的是为了把学到的新知识做个总结梳理,在整理中查缺补漏,也希望大家看了我的文章能有收获,如有错误的地方欢迎指出。
索引概述:
索引是与表相关的可选的结构(聚簇索引除外),索引的作用是为了加快对表的查询,更快速的定位到数据。数据库对表做DML操作,默认的维护索引。
索引分类:
索引维护:
创建索引
- CREATE [OR REPLACE] [CLUSTER|NOT PARTIAL][UNIQUE | BITMAP| SPATIAL] INDEX <
-
- 索引名>
-
- ON [<模式名>.]<表名>(<索引列定义>{,<索引列定义>}) [GLOBAL] [<STORAGE 子句>]
-
- [NOSORT] [ONLINE];
-
- <索引列定义>::= <索引列表达式>[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 表示支持异步索引,即创建索引过程中可以对索引依赖的表做增、删、改操作。
重建索引
- SP_REBUILD_INDEX(SCHEMA_NAME varchar(256), INDEX_ID int);
- 或者
- alter index ind_emp rebuild online;
drop index ind_emp;
索引注意事项
1、当模糊查询时,where条件为A like '%xxx'时是无法使用到A列上的索引。解决办法为建立函数索引,然后改写对应sql条件;若无法改写sql可以通过调整参数LIKE_OPT_FLAG。 LIKE_OPT_FLAG参数介绍:值为0为不优化;1:对于LIKE 表达式首尾存在通配符的情况,优化为POSITION()函数;对于 LIKE 表达式首部存在通配符,并且条件列存在REVERSE()函数索引时,优化为 REVERSE()函数;2:对于 COL1 LIKE COL2 || '%'的情况,优化为POSITION()函数;4:对于 COL1 LIKE ‘A’||‘B%’的情况,优化为 COL1 LIKE ‘AB%’。
开启参数后创建函数索引:
CREATE INDEX index_name ON table_name(POSITION('XXX',A));
2、存在空值的列上创建索引时需要注意,空值数据信息是不被记录在索引里的,所以当涉及到这些数据的查询时,是无法使用索引的,可以利用一些小技巧,将null的信息也存放在索引中,如创建nvl(列名,0) 或者如下图
CREATE INDEX index_name ON table_name(列名,常量);
3、不支持建立分区函数索引
4、若函数索引中使用的确定性函数发生了变更或删除,用户需手动重建函数索引
5、CLOB和TEXT只能建立全文索引、BLOB不能建立任何索引
6、位图索引:创建方式和普通索引一致, 对低基数的列创建位图索引,能够有效提高,基于该列的查询效率,特别注意位图索引会严重影响到插入和更新操作,不能在业务表上建立。位图索引还具有以下约束:
1) 支持普通表、 堆表和水平分区表创建位图索引;
2) 不支持对大字段创建位图索引;
3) 不支持对计算表达式列创建位图索引;
4) 不支持在 UNIQUE 列和 PRIMARY KEY 上创建位图索引;
5) 不支持对存在 CLUSTER KEY 的表创建位图索引;
6) 仅支持单列或者不超过 63 个组合列上创建位图索引;
7) MPP 环境下不支持位图索引的创建;
8) 不支持快速装载建有位图索引的表;
9) 不支持全局位图索引;
10) 包含位图索引的表不支持并发的插入、删除和更新操作。
7、空间索引: 创建时需指定SPATIAL关键字,删除方式和普通索引一样。 只能在DMGEO包内的空间类型的列上创建,如果使用DMGEO包内的空间位置进行查询时,使用空间索引能够提高查询效率。空间索引具有以下约束:
1) 只支持在空间类型列上创建;
2) 不支持使用 ONLINE 选项异步方式创建;
3) 不支持在水平分区表上创建空间索引;
4) 不支持在 MPP 环境和复制环境下创建空间索引;
5) 空间索引不支持组合索引,只能在一个列上创建;
6) 不支持在 4K 的页上建立空间索引。
达梦社区地址:https://eco.dameng.com |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。