HGDB的分割槽表實現SQL Server的分割槽檢視

瀚高PG實驗室發表於2021-11-22
環境
系統平臺: 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中單表的名稱,這樣名稱保持一致,應用程式程式碼基本不用修改。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69994931/viewspace-2843364/,如需轉載,請註明出處,否則將追究法律責任。

相關文章