HGDB的分区表实现SQL Server的分区视图

Posted 瀚高PG实验室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HGDB的分区表实现SQL Server的分区视图相关的知识,希望对你有一定的参考价值。

目录
环境
文档用途
详细信息

环境
系统平台:Linux x86-64 Red Hat Enterprise Linux 7
版本:4.3.4.7
文档用途
SQL Server分区视图可以根据特定的列值在逻辑上将大型表中存在的大量数据拆分为较小的数据范围,并将此数据范围存储在单表中。

为此,需要在分区列上定义CHECK约束,以将数据划分为数据范围。

然后,创建一个视图View(即分区视图),该视图使用UNION ALL运算符将所有单表的SELECT合并为一个结果集。

当从视图中选择数据时,CHECK约束用于指定哪个表包含请求的数据,这类似于在表分区功能中定义分区功能。

同时,分区视图也可以进行增删改查操作。

HGDB中的替代方案是创建分区表,把SQL Server中的约束列作为分区键,CHECK约束值作为每个分区的取值范围,分区视图作为分区表。同样,也可以进行增删改查操作。

详细信息
SQL Server分区视图示例:

--创建单表012

create table st_0(sid int, sname varchar(10), ssex varchar(8), skey int, primary key(sid,skey));

create table st_1(sid int, sname varchar(10), ssex varchar(8), skey int, primary key(sid,skey));

create table st_2(sid int, sname varchar(10), ssex varchar(8), skey int, primary key(sid,skey));

--添加分区键skey的约束

ALTER TABLE st_0 ADD CONSTRAINT ck_st0_skey CHECK (skey=0);

ALTER TABLE st_1 ADD CONSTRAINT ck_st1_skey CHECK (skey=1);

ALTER TABLE st_2 ADD CONSTRAINT ck_st2_skey CHECK (skey=2);

--创建索引

CREATE INDEX ix_st_0_ssex ON st_0(ssex);

CREATE INDEX ix_st_1_ssex ON st_1(ssex);

CREATE INDEX ix_st_2_ssex ON st_2(ssex);

--创建视图

create view v_st as

select * from st_0

union all

select * from st_1

union all

select * from st_2;

--插入数据

insert into st_0 values(1, '赵', '男', 0);

insert into st_0 values(2, '钱', '女', 0);

insert into st_0 values(3, '孙', '男', 0);



insert into st_1 values(4, '李', '男', 1);

insert into st_1 values(5, '周', '女', 1);

insert into st_1 values(6, '吴', '女', 1);

insert into st_1 values(7, '郑', '男', 1);



insert into st_2 values(8, '王', '女', 2);

insert into st_2 values(9, '冯', '男', 2);

insert into st_2 values(10, '陈', '女', 2);

insert into st_2 values(11, '楚', '男', 2);

insert into st_2 values(12, '魏', '女', 2);

HGDB分区表的实现方案:

--创建分区表,表名是SQL Server中分区视图的名称,分区键是check约束的列

create table v_st(sid int, sname varchar(10), ssex varchar(8), skey int)partition by list(skey);

注:因为SQL Server的每个单表中分区列的值是固定值,因此采用list分区

--创建分区,分区的名称是SQL Server中单表的名称,values的值对应SQL Server中check约束的值

create table st_0 partition of v_st for values in (0);

create table st_1 partition of v_st for values in (1);

create table st_2 partition of v_st for values in (2);

--分区表上添加主键,与SQL Server中的单表主键保持一致

alter table st_0 add CONSTRAINT pk_st_0 PRIMARY KEY (sid,skey);

alter table st_1 add CONSTRAINT pk_st_1 PRIMARY KEY (sid,skey);

alter table st_2 add CONSTRAINT pk_st_2 PRIMARY KEY (sid,skey);

--分区表上创建索引,与SQL Server中的单表索引保持一致

CREATE INDEX ix_st_0_ssex ON st_0(ssex);

CREATE INDEX ix_st_1_ssex ON st_1(ssex);

CREATE INDEX ix_st_2_ssex ON st_2(ssex);

--插入数据

insert into st_0 values(1, '赵', '男', 0);

insert into st_0 values(2, '钱', '女', 0);

insert into st_0 values(3, '孙', '男', 0);



insert into st_1 values(4, '李', '男', 1);

insert into st_1 values(5, '周', '女', 1);

insert into st_1 values(6, '吴', '女', 1);

insert into st_1 values(7, '郑', '男', 1);



insert into st_2 values(8, '王', '女', 2);

insert into st_2 values(9, '冯', '男', 2);

insert into st_2 values(10, '陈', '女', 2);

insert into st_2 values(11, '楚', '男', 2);

insert into st_2 values(12, '魏', '女', 2);

注:分区表的名称是SQL Server中分区视图的名称,分区的名称是SQL Server中单表的名称,这样名称保持一致,应用程序代码基本不用修改。

以上是关于HGDB的分区表实现SQL Server的分区视图的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2005/2008/2012中应用分布式分区视图

在Sql Server 2000 的分区视图数据量太大导致中无法更新,怎么办

SQL Server 分区表

如何在 SQL Server 2005 中创建和维护最近 7 天的分区视图和存档记录?

当有更多行或查询变得更复杂时,分区视图会读取所有表? SQL Server 2008 错误?

千万级SQL Server数据库表分区的实现