Oracle生成了两张表,名称是表名后面增加00DMPART和01DMPART。查询或修改的时候数据库自动将两种表组合在一起。
水平分区支持RANGE和HASH两种方法,与Oracle的RANGE、HASH分区相比要简单很多。
首先看看RANGE分区:
SQL>CREATE TABLE T_PART_RANGE
2 (ID NUMBER,
3 NAME VARCHAR(30),
4 CREATE_DATE DATE)
5 PARTITION BY RANGE (CREATE_DATE)
6 LEFT FOR VALUES (TO_DATE('2009-1-1', 'YYYY-MM-DD'),
7 TO_DATE('2010-1-1', 'YYYY-MM-DD'),
8 TO_DATE('2011-1-1', 'YYYY-MM-DD'));
CREATE TABLE T_PART_RANGE
(ID NUMBER,
NAME VARCHAR(30),
CREATE_DATE DATE)
PARTITION BY RANGE (CREATE_DATE)
LEFT FOR VALUES (TO_DATE('2009-1-1', 'YYYY-MM-DD'),
TO_DATE('2010-1-1', 'YYYY-MM-DD'),
TO_DATE('2011-1-1', 'YYYY-MM-DD'));
time used: 18.524(ms) clock tick:30718050.
2 (ID NUMBER,
3 NAME VARCHAR(30),
4 CREATE_DATE DATE)
5 PARTITION BY RANGE (CREATE_DATE)
6 LEFT FOR VALUES (TO_DATE('2009-1-1', 'YYYY-MM-DD'),
7 TO_DATE('2010-1-1', 'YYYY-MM-DD'),
8 TO_DATE('2011-1-1', 'YYYY-MM-DD'));
CREATE TABLE T_PART_RANGE
(ID NUMBER,
NAME VARCHAR(30),
CREATE_DATE DATE)
PARTITION BY RANGE (CREATE_DATE)
LEFT FOR VALUES (TO_DATE('2009-1-1', 'YYYY-MM-DD'),
TO_DATE('2010-1-1', 'YYYY-MM-DD'),
TO_DATE('2011-1-1', 'YYYY-MM-DD'));
time used: 18.524(ms) clock tick:30718050.
用户只能通过设定分区的上限或下限来确定分区的创建,而达梦似乎并没有提供分区信息的视图。
这是一个HASH分区的例子:
SQL>CREATE TABLE T_PART_RANGE
2 (ID NUMBER,
3 NAME VARCHAR(30),
4 CREATE_DATE DATE)
5 PARTITION BY RANGE (CREATE_DATE)
6 LEFT FOR VALUES (TO_DATE('2009-1-1', 'YYYY-MM-DD'),
7 TO_DATE('2010-1-1', 'YYYY-MM-DD'),
8 TO_DATE('2011-1-1', 'YYYY-MM-DD'));
CREATE TABLE T_PART_RANGE
(ID NUMBER,
NAME VARCHAR(30),
CREATE_DATE DATE)
PARTITION BY RANGE (CREATE_DATE)
LEFT FOR VALUES (TO_DATE('2009-1-1', 'YYYY-MM-DD'),
TO_DATE('2010-1-1', 'YYYY-MM-DD'),
TO_DATE('2011-1-1', 'YYYY-MM-DD'));
time used: 18.524(ms) clock tick:30718050.
2 (ID NUMBER,
3 NAME VARCHAR(30),
4 CREATE_DATE DATE)
5 PARTITION BY RANGE (CREATE_DATE)
6 LEFT FOR VALUES (TO_DATE('2009-1-1', 'YYYY-MM-DD'),
7 TO_DATE('2010-1-1', 'YYYY-MM-DD'),
8 TO_DATE('2011-1-1', 'YYYY-MM-DD'));
CREATE TABLE T_PART_RANGE
(ID NUMBER,
NAME VARCHAR(30),
CREATE_DATE DATE)
PARTITION BY RANGE (CREATE_DATE)
LEFT FOR VALUES (TO_DATE('2009-1-1', 'YYYY-MM-DD'),
TO_DATE('2010-1-1', 'YYYY-MM-DD'),
TO_DATE('2011-1-1', 'YYYY-MM-DD'));
time used: 18.524(ms) clock tick:30718050.
虽然达梦数据库支持RANGE和HASH分区,但是与Oracle的分区还是存在很大的区别的。其中最主要的一点就是不透明,分区表建立成功后,就无法判断这个表十分是分区表了,而建立的分区数量,每个分区的名称以及物理属性都是不可见的。连分区名称都不清除,更不要说支持Oracle的SELECT * FROM TABLE PARTITION (P1)的语法了。
达梦数据库支持分区,也支持分区索引,但是在分区的透明度上还存在很大的不足。