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