目錄

環(huán)境

文檔用途

詳細(xì)信息


環(huán)境

系統(tǒng)平臺:Linux x86-64 Red Hat Enterprise Linux 7

版本:4.3.4.7

文檔用途

SQL Server分區(qū)視圖可以根據(jù)特定的列值在邏輯上將大型表中存在的大量數(shù)據(jù)拆分為較小的數(shù)據(jù)范圍,并將此數(shù)據(jù)范圍存儲在單表中。

為此,需要在分區(qū)列上定義CHECK約束,以將數(shù)據(jù)劃分為數(shù)據(jù)范圍。

然后,創(chuàng)建一個視圖View(即分區(qū)視圖),該視圖使用UNION ALL運(yùn)算符將所有單表的SELECT合并為一個結(jié)果集。

當(dāng)從視圖中選擇數(shù)據(jù)時,CHECK約束用于指定哪個表包含請求的數(shù)據(jù),這類似于在表分區(qū)功能中定義分區(qū)功能。

同時,分區(qū)視圖也可以進(jìn)行增刪改查操作。


HGDB中的替代方案是創(chuàng)建分區(qū)表,把SQL Server中的約束列作為分區(qū)鍵,CHECK約束值作為每個分區(qū)的取值范圍,分區(qū)視圖作為分區(qū)表。同樣,也可以進(jìn)行增刪改查操作。


詳細(xì)信息

SQL Server分區(qū)視圖示例:

--創(chuàng)建單表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));

--添加分區(qū)鍵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);

--創(chuàng)建索引

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);

--創(chuàng)建視圖

create view v_st as

select * from st_0

union all

select * from st_1

union all

select * from st_2;

--插入數(shù)據(jù)

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分區(qū)表的實(shí)現(xiàn)方案:

--創(chuàng)建分區(qū)表,表名是SQL Server中分區(qū)視圖的名稱,分區(qū)鍵是check約束的列

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

注:因?yàn)镾QL Server的每個單表中分區(qū)列的值是固定值,因此采用list分區(qū)

--創(chuàng)建分區(qū),分區(qū)的名稱是SQL Server中單表的名稱,values的值對應(yīng)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);

--分區(qū)表上添加主鍵,與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);

--分區(qū)表上創(chuàng)建索引,與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);

--插入數(shù)據(jù)

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);

注:分區(qū)表的名稱是SQL Server中分區(qū)視圖的名稱,分區(qū)的名稱是SQL Server中單表的名稱,這樣名稱保持一致,應(yīng)用程序代碼基本不用修改。