目錄

環境

文檔用途

詳細信息


環境

系統平臺: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分區視圖示例:

--創建單表0、1、2

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中單表的名稱,這樣名稱保持一致,應用程序代碼基本不用修改。