达梦数据库-SQL索引相关知识点

作为一个达梦的初学者,写这篇文章的目的是为了把学到的新知识做个总结梳理,在整理中查缺补漏,也希望大家看了我的文章能有收获,如有错误的地方欢迎指出。

索引概述:

        索引是与表相关的可选的结构(聚簇索引除外),索引的作用是为了加快对表的查询,更快速的定位到数据。数据库对表做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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值