概述
通过本次达梦数据库培训真的是收获颇丰。培训期间遇到的问题出现的报错,老师都有非常耐心细致的讲解。培训的内容从各类表讲起,梳理了数据库的架构。在这里,想分享一些课程上学到的基础知识:
同义词
同义词:表或视图、序列、函数、存储过程的别名,为安全考虑,同义词分为公共同义词,普通同义词。
公共同义词:所有用户都可以使用的,使用的时候不需要加任何模式名。达梦用的数据字典、动态性能视图都 sys 的公共同义词。SYS是达梦的内置管理账号,不能用于登录数据库。
普通同义词:某个特定用户才可以使用的,使用的时候要加模式名。
创建同义词:
- 普通同义词
CREATE SYNONYM "TEST"."C1" FOR "TEST"."EXT2";
- 创建公共同义词
CREATE PUBLIC SYNONYM "C2" FOR "TEST"."SALE_SUM_P1_P1_1";
- 删除公共同义词
Drop public synonym c2;
- 删除普通同义词
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;
创建自动更新的物化视图(要有物化视图日志)
- create materialized view log on test.t1; 创建物化视图日志
- create materialized view test.vm2 refresh fast on commit as select * from test.t1; 创建快速更新物化视图。
- create materialized view test.vm3 refresh complete on commit as select * from test.t1; 创建完全更新的物化视图。
索引
达梦默认的是索引组织表,当建表语句未指定聚簇索引键,DM的默认的聚簇索引是 rowid,即记录默认以 rowid 在页面中排序。
DM 提供三种方式供用户指定聚簇索引:
- cluster primary key
- Cluster key
- Cluster unique key
DM8 有那些索引:
- 聚簇索引:每一个普通表有且只有一个聚簇索引
- 唯一索引:保证表上的不会有两行数据具有相同的值.
- 函数索引:包含函数表达式的预先计算的值。
- 位图索引:列上的值的类型少
- 复合索引:表中两个或两个以上的列一起建立索引
- 全文索引:在表中文本列上建索引。
达梦索引采用的是 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;
在创建表的时候,有主键和唯一约束,数据库就会自动创建唯一索引。
主键和唯一索引有什么不同:
- 主键是一个约束, 唯一索引是一种索引
- 主键创建后包含唯一索引,唯一索引不一定是主键。
- 一个表只能有一个主键,但是可以有多个唯一索引
- 主键不能为 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
最后
以上就是感动糖豆为你收集整理的达梦数据库-同义词、物化视图、索引相关知识的全部内容,希望文章能够帮你解决达梦数据库-同义词、物化视图、索引相关知识所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复