目錄
環(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)用程序代碼基本不用修改。