我是靠谱客的博主 感动糖豆,最近开发中收集的这篇文章主要介绍达梦数据库-同义词、物化视图、索引相关知识,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

通过本次达梦数据库培训真的是收获颇丰。培训期间遇到的问题出现的报错,老师都有非常耐心细致的讲解。培训的内容从各类表讲起,梳理了数据库的架构。在这里,想分享一些课程上学到的基础知识:

同义词

同义词:表或视图、序列、函数、存储过程的别名,为安全考虑,同义词分为公共同义词,普通同义词。

公共同义词:所有用户都可以使用的,使用的时候不需要加任何模式名。达梦用的数据字典、动态性能视图都 sys 的公共同义词。SYS是达梦的内置管理账号,不能用于登录数据库。

普通同义词:某个特定用户才可以使用的,使用的时候要加模式名。

创建同义词:

  1. 普通同义词

CREATE SYNONYM "TEST"."C1" FOR "TEST"."EXT2";

  1. 创建公共同义词

CREATE PUBLIC SYNONYM "C2" FOR "TEST"."SALE_SUM_P1_P1_1";

  1. 删除公共同义词

Drop public synonym c2;

  1. 删除普通同义词

Drop synonym test.c1;

物化视图

视图分类:简单视图,复杂视图,物化视图。

简单视图和复杂视图不占磁盘空间,实际上是一个虚表,真正数据存储 base table.

简单视图可以 dml(insert update,delete)

复杂视图不允许直接 DML,需要通过触发器来完成,触发器创建时,不需要使用 before after,而将替换成 instead of.

当视图中包含以下结构之一,就是表示不可更新的视图,都不允许直接 dml. Ø 具有集合操作的(union union all minus..) Ø

具有分组函数的 Ø

具有 group by having start...with Ø

具有 distinct

具有集合运算连接。

物化视图: 数据要单独存储,占用磁盘空间,规划表空间。

物化视图的数据来自于基表,基表发生的变化,物化视图可以根据更 新方式来进行数据更新。

更新模式:

手动(默认的方式):demand

自动更新:commit

如何自动更新:

FAST ----快速更新

Complete --完全更新

Force----选择性更新

Never---不更新。

创建手动更新的物化视图

create materialized view test.mv1 as select * from test.t1;

修改 name 的值,手动更新 mv1;

refresh materialized view test.mv1;

创建自动更新的物化视图(要有物化视图日志)

  1. create materialized view log on test.t1; 创建物化视图日志
  2. create materialized view test.vm2 refresh fast on commit as select * from test.t1; 创建快速更新物化视图。
  3. create materialized view test.vm3 refresh complete on commit as select * from test.t1; 创建完全更新的物化视图。

索引

达梦默认的是索引组织表,当建表语句未指定聚簇索引键,DM的默认的聚簇索引是 rowid,即记录默认以 rowid 在页面中排序。

DM 提供三种方式供用户指定聚簇索引:

  1. cluster primary key
  2. Cluster key
  3. Cluster unique key

DM8 有那些索引:

  1. 聚簇索引:每一个普通表有且只有一个聚簇索引
  2. 唯一索引:保证表上的不会有两行数据具有相同的值.
  3. 函数索引:包含函数表达式的预先计算的值。
  4. 位图索引:列上的值的类型少
  5. 复合索引:表中两个或两个以上的列一起建立索引
  6. 全文索引:在表中文本列上建索引。

达梦索引采用的是 B+树。

索引也是占存储空间,所以我们需要将索引存储在专属的表空间中。

创建索引:

CREATE TABLESPACE IND DATAFILE '/dm8/data/DAMENG/ind_01.dbf' size 64;

唯一索引

create table test.t13(id int, name varchar(20));

create unique index test.t13_ind on test.t13(id) tablespace IND;

在创建表的时候,有主键和唯一约束,数据库就会自动创建唯一索引。

主键和唯一索引有什么不同:

  1. 主键是一个约束, 唯一索引是一种索引
  2. 主键创建后包含唯一索引,唯一索引不一定是主键。
  3. 一个表只能有一个主键,但是可以有多个唯一索引
  4. 主键不能为 null, 唯一索引可以有多个 null 值。

5、主键可以用为外键,唯一索引不可以。

函数索引

可以使用自定义函数

create table test.emp as select * from dmhr.employee;

explain select employee_name,email from test.emp where  upper(email)=upper('maxueming@dameng.com');

单行函数

字符:inicap lower upper lpad trim replace instr substr

数值运算,round trunc mod

日期 add_months, month_between, next_day, last_day

聚合函数:sum avg count max min

复合索引

索引由表中的多列构成,注意先后顺序。 在复合索引中,单独使用前导列(第一列)优化器会走二级索引,单 独使用非前导列,优化器不会走二级索引,会走全表扫。如果同时使 用复合索引字段,优化器会走二级索引。

索引在查询语句里面是否会用到和 sql 编写相关,包括索引的扫描方 式,都会根据表中的列值分布,统计信息,过滤字段的不同而不同。

create index test.emp_ind2 on test.emp(employee_id,employee_name) tablespace ind;

索引的维护

重建索引

Alter index test.ind_emp rebulid;

Alter index test.ind_emp rebulid online;

查看索引的相关信息

DBA_INDEXES, USER_INDEXES;

删除索引:

Drop index test.ind_emp;

分区索引

如果表是分区表,该表上创建的索引就是分区索引,非堆表每个分区 一个索引(局部索引),堆表可以创建全局索引,也可以创建局部索引,在创建全局索引的时候指定 global 关键字。

create index "T1_IND" on "TEST"."T1"("ID") storage(initial 1,next 1,minextents 1, on "IND");

全文索引

全文检索技术是智能信息管理的关键技术之一,其主要目的就是实现对大容量的非结构化数据的快速查找,DM 实现了全文检索功能,并将其作为 DM 服务器的一个较独立的组件,提供更加准确的全文检索 功能,较好地解决了模糊查询方式带来的问题。

创建全文索引:

create context index cti_address on person.address(address1) lexer default_lexer;

更新全文索引

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;

查看全文索引

Select * from ctisys.syscontextindexe

最后

以上就是感动糖豆为你收集整理的达梦数据库-同义词、物化视图、索引相关知识的全部内容,希望文章能够帮你解决达梦数据库-同义词、物化视图、索引相关知识所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部