达梦8表/索引

对于普通表和索引, DM8 提供了以下的存储参数:
1. 初始簇数目 INITIAL:指建立表时分配的簇个数,必须为整数,最小值为 1,最大值为 256,缺省为 1;
2. 下次分配簇数目 NEXT:指当表空间不够时,从数据文件中分配的簇个数,必须为整数,最小值为 1,最大值为 256,缺省为 1;
3. 最小保留簇数目 MINEXTENTS:当删除表中的记录后,如果表使用的簇数目小于这个值,就不再释放表空间,必须为整数,最小值为 1,最大值为 256,缺省为 1;
4. 填充比例 FILLFACTOR:指定插入数据时数据页的充满程度,取值范围从 0 到100。默认值为 0,等价于 100,表示全满填充,未充满的空间可供页内的数据更新时使用。插入数据时填充比例的值越低,可由新数据使用的空间就越多;更新数据时填充比例的值越大,更新导致出现的页分裂的几率越大;
5. 表空间名:在指定的表空间上建表或索引,表空间必须已存在,默认为用户缺省的表空间。

1.创建不同类型的表

行存储表:

CREATE TABLE t1
( PERSONID INT IDENTITY(1,1) CLUSTER PRIMARY KEY,
SEX CHAR(1) NOT NULL,
NAME VARCHAR(50) NOT NULL,
EMAIL VARCHAR(50),
PHONE VARCHAR(25))
STORAGE
( INITIAL 5, MINEXTENTS 5,NEXT 2, ON MAIN, FILLFACTOR 85);

表空间main,初始簇大小为 5,最小保留簇数目为 5,下次分配簇数目为 2,填充比例为 85。

添加检查约束:

alter table t1 add   column age int check(age <150);

分区表:

CREATE TABLE t2
(C1 INT,
C2 INT)
PARTITION BY RANGE(C1)
(PARTITION PAR1 VALUES LESS THAN(5),
PARTITION PAR2 VALUES LESS THAN(100) STORAGE (ON MAIN));

列存储表:

HUGE 表需要建立在混合表空间上。 建立 HUGE 表如果不使用默认的混合表空间 MAIN,
则必须要先创建一个混合表空间。
CREATE HUGE TABLE t3
(
S_NO INT,
S_CLASS VARCHAR,
S_COMMENT VARCHAR(79) STORAGE(STAT NONE)
)STORAGE(SECTION(65536), FILESIZE(64),ON MAIN) LOG ALL;

对于 HUGE 表可以指定如下参数:
1. 区大小(一个区的数据行数)。 区大小可以通过设置表的存储属性来指定,区的大小必须是 2 的多少次方,如果不是则向上对齐。取值范围: 1024 行~1024*1024行。默认值为 65536 行。
2. 是否记录区统计信息,即在修改时是否做数据的统计。
3. 所属的表空间。创建 HUGE 表,需要通过存储属性指定其所在的表空间,不指定则存储于默认表空间 MAIN 中。 HUGE 表指定的表空间只能是混合表空间。
4. 文件大小。创建 HUGE 表时还可以指定单个文件的大小,通过表的存储属性来指定,取值范围为 16M~1024*1024M。不指定则默认为 64M。 文件大小必须是 2 的多少次方,如果不是则向上对齐。
5. 日志属性。 1) LOG NONE:不做镜像; 2) LOG LAST:做部分镜像; 3) LOG ALL:全部做镜像。
如下面的建表语句: STUDENT 表的区大小为 65536 行,文件大小为 64M,指定所在的混合表空间为 TS1,做完整镜像, S_COMMENT 列指定的区大小为不做统计信息,其它列(默认)都做统计信息。

临时表:

CREATE GLOBAL TEMPORARY TABLE TMP1(
EMPNO INT PRIMARY KEY,
ENAME VARCHAR(15) NOT NULL,
JOB VARCHAR(10)) ON COMMIT DELETE ROWS;


DM 临时表支持以下功能:
1. 在临时表中,会话可以像普通永久表一样更新、插入和删除数据;
2. 临时表的 DML 操作产生较少的 REDO 日志;
3. 临时表支持建索引,以提高查询性能;
4. 在一个会话或事务结束后,数据将自动从临时表中删除;
5. 不同用户可以访问相同的临时表,每个用户只能看到自己的数据;
6. 临时表的数据量很少,意味着更高效的查询效率;
7. 临时表的表结构在数据删除后仍然存在,便于以后的使用;
8. 临时表的权限管理跟普通表一致。
临时表 ON COMMIT 关键词指定表中的数据是事务级还是会话级的,默认情况下是事务级的。
 ON COMMIT DELETE ROWS:指定临时表是事务级的,每次事务提交或回滚之后,表中所有数据都被删除;
2ON COMMIT PRESERVE ROWS:指定临时表是会话级的,会话结束时才清空表,并释放临时 B 树。

2.表的DDL和DML操作

创建表status

CREATE TABLE STUDENT(
STUNO INT CLUSTER PRIMARY KEY,
STUNAME VARCHAR(15) NOT NULL,
TEANO INT,
CLASSID INT);

删除一个不存在的表:

SQL> DROP TABLE employee;
DROP TABLE employee;
第1 行附近出现错误[-2106]:无效的表或视图名[EMPLOYEE].
已用时间: 0.396(毫秒). 执行号:0.
SQL> DROP TABLE if exists employee;
操作已执行
已用时间: 0.527(毫秒). 执行号:633.

删除表可以用:
delete

truncate 

drop

3.查看表的定义

CALL SP_TABLEDEF('SYSDBA', 'T3');

4.达梦8索引

从不同的角度可将索引分为五大类
一、 从物理存储角度进行分类,可分为聚集索引和非聚集索引

二、 从索引功能角度来分,可分为唯一索引、函数索引、位图索引、位图连接索引、全
文索引、空间索引、数组索引、普通索引。
 唯一索引:索引数据根据索引键唯一;
 函数索引:包含函数/表达式的预先计算的值;
 位图索引: 对低基数的列创建位图索引;
 位图连接索引: 针对两个或者多个表连接的位图索引,主要用于数据仓库中;
 全文索引:在表的文本列上而建的索引。具体内容请参考第 19 章;
 空间索引:在空间数据上创建的索引,专用于 DMGEO 包中;
 数组索引: 在一个只包含单个数组成员的对象列上创建的索引;
 普通索引:除了唯一索引、函数索引、位图索引、位图连接索引、全文索引、空间
索引、数组索引以外的索引,均为普通索引
三、 从虚实角度来分,可分为虚索引和实索引。
 虚索引:创建 PRIMARY KEY 主键约束或 UNIQUE 唯一约束时,系统会自动创建一
个相关的唯一索引。因为不需要用户创建,因此称为虚索引。
 实索引:虚索引以外的索引均为实索引。
四、 四从索引键值的个数进行分类,可分为单列索引和复合索引
 单列索引:只有一个索引键的索引。
 复合索引:含有多个索引键的索引。
五 从分区的角度来分,可分为全局索引和局部索引。全局索引和局部索引均为二级索
引,专门用于水平分区表中。
 全局索引:全局索引是以整张表的数据为对象而建立的索引。
 局部索引:局部索引是在分区表的每个分区上创建的索引。
 

创建聚集索引
CREATE CLUSTER INDEX clu_emp_name ON emp(ename);
创建唯一索引
CREATE UNIQUE INDEX dept_unique_index ON dept (dname)
STORAGE (ON MAIN);

自动创建与约束相关的唯一索引
ALTER TABLE EMP ADD CONSTRAINT PK_EMP_NAME PRIMARY KEY (NAME);
创建基于函数的索引
CREATE INDEX IDX ON EXAMPLE_TAB(COLUMN_A + COLUMN_B);
创建位图索引
CREATE BITMAP INDEX S1 ON PURCHASING.VENDOR (VENDORID);
位图索引具有以下约束:
1. 支持普通表、堆表和水平分区表创建位图索引;
2. 不支持对大字段创建位图索引;
3. 不支持对计算表达式列创建位图索引;
4. 不支持在 UNIQUE 列和 PRIMARY KEY 上创建位图索引;
5. 不支持对存在 CLUSTER KEY 的表创建位图索引;
6. 仅支持单列或者不超过 63 个组合列上创建位图索引;
7. MPP 环境下不支持位图索引的创建;
8. 不支持快速装载建含有位图索引的表;
9. 不支持全局位图索引;
10. 包含位图索引的表不支持并发的插入、删除和更新操作

创建位图连接索引
create bitmap index SALES_CUSTOMER_NAME_IDX on SALES.SALESORDER_HEADER(SALES.CUSTOMER.PERSONID)
from SALES.CUSTOMER, SALES.SALESORDER_HEADER
where SALES.CUSTOMER.CUSTOMERID = SALES.SALESORDER_HEADER.CUSTOMERID;

重建索引:

SP_REBUILD_INDEX(SCHEMA_NAME varchar(256), INDEX_ID int);
SCHEAM_NAME 为索引所在的模式名, INDEX_ID 为索引 ID。
使用说明:
1. 水平分区子表,临时表和系统表上建的索引不支持重建
2. 虚索引和聚集索引不支持重建

删除索引
DROP INDEX emp_ename;
删除主键约束
ALTER TABLE emp DROP CONSTRAINT pk_emp_name;
查看索引信息
创建索引后,可以通过 INDEXDEF 系统函数查看索引的定义。
INDEXDEF(INDEX_ID int, PREFLAG int);
INDEX_ID 为索引 ID, PREFLAG 表示返回信息中是否增加模式名前缀。例如,需要查
看索引 emp_name 的定义,假设其索引 ID 为 1547892,那么使用以下语句查看索引定义。
SELECT INDEXDEF(1547892, 0);
或 SELECT INDEXDEF(1547892, 1);

在线服务平台地址:

https://eco.dameng.com

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值