一.建立索引的准则

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

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

1.2怎样创建正确的索引

(1)如果需要经常地检索大表中的少量的行,就为查询键创建索引;

(2)为了改善多个表的连接的性能,可为连接列创建索引;

(3)主键和唯一键自动具有索引,在外键上很多情况下也创建索引;

(4)小表不需要索引;

(5)列中的值相对比较唯一 ;

(6)取值范围大,适合建立索引;

(7)CLOB和TEXT只能建立全文索引、BLOB不能建立任何索引。

1.3为性能而安排索引列

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

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

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

二.创建索引

2.1创建聚集索引

DM数据库中表(列存储表和堆表除外)都是使用 B+树索引结构管理的,每一个普通表都有且仅有一个聚集索引,数据都通过聚集索引键排序,根据聚集索引键可以快速查询任何记录。

当建表语句未指定聚集索引键时,DM数据库的默认聚集索引键是ROWID。若指定索引键,表中数据都会根据指定索引键排序。建表后,DM数据库也可以用创建新聚集索引的方式来重建表数据,并按新的聚集索引排序。例如,可以对employee表以employee_name列新建聚集索引。

先建立索引表空间ind_tbs:

Sql>create tablespaceind_tbsdatafile '/dm8/data/DAMENG/ind_tbs.dbf' size 32 autoextend on next 10 maxsize 2000;

Sql>create index ind_emp on dmhr.employee(employee_name) tablespaceind_tbs;

2.2复合索引

Sql>create index ind_emp_dep on dmhr.employee(employee_id,department_id) tablespaceind_tbs;

2.3函数索引

基于函数的索引促进了限定函数或表达式的返回值的查询,该函数或表达式的值被预先计算出来并存储在索引中。

Sql> create index ind_emp1 on dmhr.employee(abs(salary)) tablespaceind_tbs;

2.4位图索引

位图索引主要针对含有大量相同值的列而创建。位图索引被广泛引用到数据仓库中。

Sql>create bitmap index ind_t on t1(id);

2.5唯一索引

索引可以是唯一的或非唯一的。唯一索引可以保证表上不会有两行数据在键列上具有相同的值。

SQL> create unique index ind_t2 on t2(id);

三.索引重建

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

DM数据库提供的重建索引的系统函数为:

SP_REBUILD_INDEX(SCHEMA_NAME varchar(256), INDEX_ID int);

SCHEAM_NAME为索引所在的模式名。

INDEX_ID为索引ID。

使用说明:

1.水平分区子表,临时表和系统表上建的索引不支持重建

2.虚索引和聚集索引不支持重建

Sql>select name,id,subtype$ from sysobjects where subtype$='INDEX' and name='IND_EMP_DEP';

Sql>sp_rebuild_index('DMHR','335555517');

SQL> alter index DMHR.IND_EMP_DEP rebuild;

在线重建索引

SQL> alter index DMHR.IND_EMP_DEP rebuild online;

四.删除索引

用户可能出于以下某项原因需要删除一个索引:

1.不再需要该索引;

2.该索引没有为针对其相关的表所发布的查询提供所期望的性能改善。例如,表可能很小,或者尽管表中有许多行但只有很少的索引项;

3.应用没有用该索引来查询数据。要想删除索引,则该索引必须包含在用户的模式中或用户必须具有DROP ANY INDEX 数据库权限。索引删除之后,该索引的段的所有簇都返回给包含它的表空间,并可用于表空间中的其他对象。

Sql>DROP INDEX dmhr.IND_EMP_DEP;

五.查看索引信息

创建索引后,可以通过INDEXDEF系统函数查看索引的定义。

INDEXDEF(INDEX_ID int, PREFLAG int);

INDEX_ID为索引 ID。

PREFLAG表示返回信息中是否增加模式名前缀。

例如,需要查看索引 IND_EMP的定义,那么使用以下语句查看索引定义。

Sql>select name,id,subtype$ from sysobjects where subtype$='INDEX' and name='IND_EMP';

Sql>SELECT INDEXDEF(33555516, 0); 或 SELECT INDEXDEF(33555516, 1);

达梦数据库和mysql索引引擎_达梦数据库如何建索引和使用相关推荐

  1. oracle数据库跟mysql的区别_关于Oracle数据库与MySQL数据库的几点区别

    Oracle数据库与MySQL数据库的区别是本文我们主要要介绍的内容,接下来我们就开始介绍这部分内容,希望能够对您有所帮助. Oracle与MySQL的区别: 1.在Oracle中用select * ...

  2. mysql 修改引擎_修改MySQL的数据库引擎为INNODB的方法

    本文主要介绍了修改MySQL的数据库引擎为INNODB的方法,希望能对您有所帮助. 对于MySQL数据库,如果你要使用事务以及行级锁就必须使用INNODB引擎.如果你要使用全文索引,那必须使用myis ...

  3. sphinx mysql存储引擎_基于Sphinx+MySQL的千万级数据全文检索(搜索引擎)架构设计...

    Sphinx,单一索引最大可包含1亿条记录,在1千万条记录情况下的查询速度为0.x秒(毫秒级).Sphinx创建索引的速度为:创建100万条记录的索引只需3-4分钟,创建1000万条记录的索引可以在5 ...

  4. 数据库开发——MySQL——存储引擎

    数据库中建立的表就是文件,现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应不同的处理机制:比如处理文本文件用txt类型,处理表格用Excel,处理图片用png等等. 一.MySQL存储引 ...

  5. 修改mysql数据引擎的方法- 提高数据库性能

    前言:同学告我说,他为了能使得数据查询变得快一点,修改的数据引擎,故查询一下,总结一下. 登录mysql后,查看当前数据库支持的引擎和默认的数据库引擎,使用下面命令: mysql>show en ...

  6. python获取数据库查询的元数据_Python数据库、MySQL存储引擎、使用分区表、更改表结构、获取数据库元数据...

    :1. 数据库基本操作 1.1 创建数据库 - CREATE DATABASE test; #创建数据库 - GRANT ALL ON test.* to user(s); #为指定用户(或所有用户) ...

  7. mysql 高性能引擎_《高性能MySQL》笔记1-MySQL架构与引擎

    ## 架构 ![](/img/pic/2019062020293149827_png_583_418_76732) > MySQL架构图 MySQL的架构分为三层. 第一层只负责提供服务,包括链 ...

  8. java面试mysql的引擎_面试官:你用过mysql哪些存储引擎,请分别展开介绍一下

    这是高级开发者面试时经常被问的问题.实际我们在平时的开发中,经常会遇到的,在用SQLyog等工具创建表时,就有一个引擎项要你去选.如下图: Mysql的存储引擎有这么多种,实际我们在平时用的最多的莫过 ...

  9. 数据库-优化-MYSQL执行引擎介绍

    MySQL执行引擎介绍(了解) 1.MyISAM存储引擎 不支持事务.也不支持外键,优势是访问速度快,对事务完整性没有 要求或者以select,insert为主的应用基本上可以用这个引擎来创建表 支持 ...

最新文章

  1. web前端培训分享:面向对象中类和对象的定义是什么?
  2. html页面跳转IP,JS获取访客IP进行自动跳转
  3. 新手入门深度学习 | 3-1:数据管道Dataset
  4. GreenDao高级用法
  5. spring boot 启动卡住_SpringBoot 居然有 44 种应用启动器
  6. Servlet 介绍
  7. java 线程map_map集合分割以及多线程处理数据
  8. 小程序短视频项目———视频详情页面开发(二)
  9. java word文档 转 html文件
  10. Keras ImageDataGenerator参数
  11. 【智慧城市】-GIS数据获取SHP建筑数据获取总结
  12. 我是如何自学C语言的(一个菜鸟的学习路)
  13. java实习收获与体会_java实习心得体会.doc
  14. delphi10.2的数学单元Math.pas
  15. [Apache Kafka 3.2源码解析系列]-2-Kaka高性能高可用设计原理
  16. 电脑需要装杀毒软件吗?两个理由看完你做决定
  17. 08、Metasploit渗透测试之信息收集
  18. 反垃圾邮件的一些相关链接
  19. 【JAVA】MyEclipse使用 - 相关技术和快捷键(转自:CSDN - lgx06)
  20. Pytorch损失函数解析

热门文章

  1. [TIM] 微信登录TIM生产QQ号【并独立使用】
  2. 树莓派接手机屏幕_如何将树莓派连接到手机屏幕
  3. PTA 选择结构 7-1 能买手机吗?
  4. python画一棵树的心理测试_【心理测试】画树测试:一棵树读你的人生
  5. “独立站+私域”的DTC直客模式电商,是告别互联网内卷唯一有效方式
  6. Mac如何查看隐藏文件夹|隐藏文件夹的显示与隐藏
  7. Threejs实现宇宙中地球动态展示和卫星绕地运动
  8. 郭天祥的10天学会51单片机_第七节
  9. 可视化 | Python电影Top250数据可视化
  10. java导出excel 边框不全_POI 导出Excel合并单元格后部分边框不显示