DM8索引介绍及操作

一、DM8简介

DM8是达梦公司在总结DM系列产品研发与应用经验的基础上,坚持开放创新、简洁实用的理念,历经五年匠心打磨,推出的新一代自研数据库。
DM8吸收借鉴当前先进新技术思想与主流数据库产品的优点,融合了分布式、弹性计算与云计算的优势,对灵活性、易用性、可靠性、高安全性等方面进行了大规模改进,多样化架构充分满足不同场景需求,支持超大规模并发事务处理和事务-分析混合型业务处理,动态分配计算资源,实现更精细化的资源利用、更低成本的投入。一个数据库,满足用户多种需求,让用户能更加专注于业务发展。

二、DM8索引简介

索引是与表相关的一种结构,它能使对应于表的SQL语句执行的更快,因为索引能快速定位数据库。
索引需要存储空间。建立或删除一个索引,不会影响基本表、数据库应用或其他索引。
一个索引可以对应数据表的一个或者多个字段,每个字段设置索引结果排序方式,默认为安字段值递增排序(ASC),也可以为递增排序(DESC)。
当插入、更改或者删除相关的表的行时,DM8会自动管理索引。如果删除索引,所有的应用仍然继续工作,单访问数据速度会变慢。
索引可以提高数据的查询效率,但也需要注意,索引会降低某些命令的执行效率,如INSERT、UPDATE、DELETE的性能,因为DM不仅需要维护基表数据还要维护索引数据。
DM8默认是索引组织表,当建表语句未指定聚集索引键,DM的默认聚集索引键是rowid,即记录默认以rowid在页面中排序。
DM8提供三种方式供用户指定聚集索引键:
1、cluster primary key
2、Cluster key;
3、Cluster unique key

三、索引适用的场景

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

四、DM8索引分类

1、聚集索引:每一个普通表有且只有一个聚集索引。注意:在建表的时候要把主键选好,尽量不要在对数据量非常大的表,建立聚集索引。
2、唯一索引:唯一索引可以保证表上不会有两行数据具有相同的值。注意:唯一索引可以保证表上不会有两行数据在键列上具有相同的值。
3、函数索引:包含函数/表达式的预先计算的值。
4、位图索引:列上值的类型少,某一列值重复值比较多可以创建位图索引。
5、复合索引:表中两个或两个以上的列一起建立索引。
6、全文索引:在表中文本列上建索引。

五、创建索引

1、唯一索引
CREATE UNIQUE INDEX T1_ID_INDEX ON DMTEST.T1(ID)
2、函数索引
CREATE INDEX TEST.IND_T2 ON TEST.T2(UPPER(NAME)) TABLESPACE IND1;
DBMS_STATS.GATHER_TABLE_STATS(‘TEST’,‘T2’);
EXPLAIN SELECT * FROM TEST.T2 WHERE UPPER(NAME)=UPPER(‘王xx’);
单行函数:
字符:initcap, lower, upper,lpad, trim replace,instr,substr
数字:round ,trunc ,mod
日期:add_months ,months_between,next_day ,last_day
聚合函数:sum ,avg ,count ,max ,min
3、复合索引
create index test.ind_t3 on test.t3(id,name);
1、复合索引中,单独使前导列(第一个字段)优化器会选择走索引;
2、单独使用非前导列优化器不会选择走索引(全表扫);
3、如果同时使用复合索引中的字段,优化器会选择走索引;
4、索引在查询语句里面是否会用到,和 sql 语句的编写很重要,包括走索引的扫描方式,都会根据表中的列值的分布,统计信息是否完整,过滤字段选择情况不同而会不同。
4、位图索引
CREATE BITMAP INDEX TEST.IND_T4 ON TEST.T4(SEX);
5、分区索引
CREATE INDEX TEST.IND_T5_R1 ON TEST.T5_R1(ID);
如果表是分区表,在该表上创建的索引就是分区索引,非堆表每个分区一个索引(局部索引),堆表可以创建全局过索引,也可以是局部索引。在创建索引时候指定 GLOBAL 关键字,那么建立的索引就是全局索引。
6、全文索引
CREATE CONTEXT INDEX cti_address ON person.address (address1) LEXER DEFAULT_LEXER;
CREATE CONTEXT INDEX cti_address ON person.address (address1) SYNC TRANSACTION;
更新全文索引:
alter context index cti_address on person.address rebuild;
更新增加全文索引信息:
alter context index cti_address on person.address increment;
删除全文索引:
DROP CONTEXT INDEX cti_address ON PERSON.ADDRESS;
查询全文索引:
CTISYS.SYSCONTEXTINDEXES

六、维护索引

1、更新索引
ALTER INDEX TEST.IND_T1 REBUILD;
2、删除索引
DROP INDEX TEST.IND_T1;

七、创建索引注意事项

1、在 CREATE INDEX 语句中列的排序会影响查询的性能。通常,将最常用的列放在最前面。如果查询中有多个字段组合定位,则不应为每个字段单独创建索引,而应该创建一个组合索引。当两个或多个字段都是等值查询时,组合索引中各个列的前后关系是无关紧要的。但是如果是非等值查询时,要想有效利用组合索引,则应该按等值字段在前,非等值字段在后的原则创建组合索引,查询时只能利用一个非等值的字段。
2、一个表可以有任意数量的索引。但是,索引越多,修改表数据的开销就越大。当插入或删除行时,表上的所有索引也要被更改;更改一个列时,包含该列的所有索引也要被更改。因此,在从表中检索数据的速度和更新表的速度之间有一个折衷。例如,如果一个表主要仅用于读,则索引多就有好处;如果一个表经常被更新,则索引不宜多建。

达梦社区

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值