达梦数据库之HUGE表

HUGE表是一种列存储表,其建立在HUGE FILE SYSTEM(HFS)机制上。HFS是达梦数据库对海量数据进行分析的一种高效、简单的列存储机制。

HUGE表存储在HTS(HUGE TABLESPACE)表空间上,最多可以创建32767个HUGE表空间。默认的HUGE表空间是HMAIN。查看HUGE表空间的SQL语句如下:

SQL> select * from v$HUGE_TABLESPACE;

行号 ID NAME PATHNAME DIR_NUM COPY_NUM SIZE_MODE

---------- ----------- ---- ------------------------------- ----------- ----------- ---------

1 4 MAIN /home/dmdba/dmdbms/DAMENG/HMAIN 1 NULL NULL

已用时间: 2.030(毫秒). 执行号:2700.

HUGE表空间与普通表空间不同:

1、对于普通表空间,数据是通过段、粗、页来管理的,并且是固定大小(4k、8k、16k、32k)的页为管理单位。

2、HUGE表空间是通过HFS存储机制来管理的。HTS本质上是一个空的文件目录。在创建HUGE表并插入数据时,数据库会在指定的HTS表空间目录下创建一系列的目录及文件。

达梦数据库支持两种类型的HUGE表:非事务型HUGE表和事务型HUGE表。

创建HUGE表空间的SQL语句如下。这里不使用默认的HUGE表空间HMAIN。

SQL> create huge tablespace htbs path '/home/dmdba/dmdbms/DAMENG/htbs';

操作已执行

已用时间: 85.644(毫秒). 执行号:2704.

创建语句中的PATH关键字需注意。

查看:

select * from v$huge_tablespace;

删除HUGE表空间的SQL语句如下:

drop huge tablespace htbs;

创建HUGE表:

SQL> create huge table h_dave(a int,b int) storage(with delta,on htbs);

操作已执行

已用时间: 18.169(毫秒). 执行号:2706.

查看创建语句:

call sp_tabledef('SYSDBA','H_DAVE');

HUGE表与普通表一样,可以进行增、删、改操作。但是HUGE表的删除与更新操作的效率会比较低,因此在HUGE表中不宜做频繁的删除及更新操作。

SQL> create huge table h_ustc storage(on htbs) as select * from test where 1=2;

操作已执行

已用时间: 60.265(毫秒). 执行号:2708.

SQL> insert into h_ustc select * from test;

影响行数 159936

已用时间: 00:00:01.615. 执行号:2709.

SQL> delete from h_ustc;

影响行数 159936

已用时间: 7.429(毫秒). 执行号:2710.

SQL> commit;

操作已执行

已用时间: 1.137(毫秒). 执行号:2711.

SQL> select count(*) from h_ustc;

行号 COUNT(*)

---------- --------------------

1 0

已用时间: 0.917(毫秒). 执行号:2712.

SQL> insert into h_ustc select * from h_ustc;

影响行数 639744

已用时间: 00:00:08.633. 执行号:2722.

SQL> insert into t_ustc select * from t_ustc;

影响行数 639744

已用时间: 00:00:07.726. 执行号:2729.

可以看出在插入数据的时候 HUGE表的速度略慢,普通表的略快。随着数据量的增多应该会更明显

SQL> delete from t_ustc;

影响行数 1279488

已用时间: 00:00:03.426. 执行号:2730.

SQL> delete from h_ustc;

影响行数 1279488

已用时间: 39.075(毫秒). 执行号:2731.

测试删除数据,HUGE表这么快?

HUGE表的存储:

SQL> create huge table h_ustc storage(on htbs) as select * from test where 1=2;

操作已执行

已用时间: 23.277(毫秒). 执行号:2741

[dmdba@localhost SCH150994945]$ pwd

/home/dmdba/dmdbms/DAMENG/htbs/SCH150994945

[dmdba@localhost SCH150994945]$ ls

TAB2000

[dmdba@localhost SCH150994945]$

[dmdba@localhost SCH150994945]$ cd TAB2000/

[dmdba@localhost TAB2000]$ ls

SQL> insert into h_ustc select * from test;

影响行数 159936

已用时间: 253.708(毫秒). 执行号:2742.

[dmdba@localhost TAB2000]$ ll

total 1114112

-rw-r--r-- 1 dmdba dinstall 67108864 Sep 13 09:49 COL0000_0000000000.dta

-rw-r--r-- 1 dmdba dinstall 67108864 Sep 13 09:49 COL0001_0000000000.dta

-rw-r--r-- 1 dmdba dinstall 67108864 Sep 13 09:49 COL0002_0000000000.dta

-rw-r--r-- 1 dmdba dinstall 67108864 Sep 13 09:49 COL0003_0000000000.dta

-rw-r--r-- 1 dmdba dinstall 67108864 Sep 13 09:49 COL0004_0000000000.dta

-rw-r--r-- 1 dmdba dinstall 67108864 Sep 13 09:49 COL0005_0000000000.dta

-rw-r--r-- 1 dmdba dinstall 67108864 Sep 13 09:49 COL0006_0000000000.dta

-rw-r--r-- 1 dmdba dinstall 67108864 Sep 13 09:49 COL0007_0000000000.dta

-rw-r--r-- 1 dmdba dinstall 67108864 Sep 13 09:49 COL0008_0000000000.dta

-rw-r--r-- 1 dmdba dinstall 67108864 Sep 13 09:49 COL0009_0000000000.dta

-rw-r--r-- 1 dmdba dinstall 67108864 Sep 13 09:49 COL0010_0000000000.dta

-rw-r--r-- 1 dmdba dinstall 67108864 Sep 13 09:49 COL0011_0000000000.dta

-rw-r--r-- 1 dmdba dinstall 67108864 Sep 13 09:49 COL0012_0000000000.dta

-rw-r--r-- 1 dmdba dinstall 67108864 Sep 13 09:49 COL0013_0000000000.dta

-rw-r--r-- 1 dmdba dinstall 67108864 Sep 13 09:49 COL0014_0000000000.dta

-rw-r--r-- 1 dmdba dinstall 67108864 Sep 13 09:49 COL0015_0000000000.dta

-rw-r--r-- 1 dmdba dinstall 67108864 Sep 13 09:49 COL0016_0000000000.dta

SQL> desc h_ustc;

行号 NAME TYPE$ NULLABLE

---------- -------- ------------ --------

1 NAME VARCHAR(128) N

2 ID INTEGER N

3 SCHID INTEGER N

4 TYPE$ VARCHAR(10) N

5 SUBTYPE$ VARCHAR(10) Y

6 PID INTEGER Y

7 VERSION INTEGER N

8 CRTDATE DATETIME(6) Y

9 INFO1 INTEGER Y

10 INFO2 INTEGER Y

11 INFO3 BIGINT Y

行号 NAME TYPE$ NULLABLE

---------- ----- --------------- --------

12 INFO4 BIGINT Y

13 INFO5 VARBINARY(128) Y

14 INFO6 VARBINARY(2048) Y

15 INFO7 BIGINT Y

16 INFO8 VARBINARY(1024) Y

17 VALID CHAR(1) Y

17 rows got

这里我们可以总结其实底层就是为每一列建立了一个文件。

删除一个文件试试:

[dmdba@localhost TAB1957]$ rm -rf COL0005_0000000000.dta

已用时间: 2.369(毫秒). 执行号:2746.

SQL> insert into h_ustc select * from test;

影响行数 159936

已用时间: 231.124(毫秒). 执行号:2747.

SQL> commit;

尽然可以插入!

重启数据库查看,这时就查不到了,报HUGE数据表文件丢失。应该是文件句柄前面还在导致。

(截图不好上传)

我们strings 看一下:

strings COL0016_0000000000.dta

YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYNNNN

可以在数据库里查看这一列内容,完全匹配。

社区地址:https://eco.dameng.com

猜你喜欢

转载自blog.csdn.net/duanpian_dba/article/details/126999531