SQL Server 資料表切割、合併、再切割與交換
資料表切割是資料庫中常用的應用
當資料量隨著時間愈來愈大
舊的資料價值就比較低,又不能隨備亂刪
如此系統在運作上要花比較多的效能
舉例來說,一本5萬頁的書 跟 5頁的書
那本書找起來比較快?
當然是只有5頁的書嘍!
在這部份,老師用圖解的來說明切割的概念
可參考下圖來了解
簡單而言,使用者並不會知道資料被切了
有點像群組的概念
還是可以查,表面上還是同一張表
但實際上已經透過分割函數分組
並在分割結構分配到不同的位置
在做切割時必須相當謹慎,切了索引記得重新建立
1本書被切成5本小書,那目錄還可以用嗎?
當然是要重新寫過目錄
如此即完成:
的分割表,看樣子似乎不錯
假設今天物價上揚,當年的20以下跟現在的40以下差不多
而且資料舊了,那這時就會有「區間滑動」問題
希望能做到:
當資料量隨著時間愈來愈大
舊的資料價值就比較低,又不能隨備亂刪
如此系統在運作上要花比較多的效能
舉例來說,一本5萬頁的書 跟 5頁的書
那本書找起來比較快?
當然是只有5頁的書嘍!
在這部份,老師用圖解的來說明切割的概念
可參考下圖來了解
簡單而言,使用者並不會知道資料被切了
有點像群組的概念
還是可以查,表面上還是同一張表
但實際上已經透過分割函數分組
並在分割結構分配到不同的位置
在做切割時必須相當謹慎,切了索引記得重新建立
1本書被切成5本小書,那目錄還可以用嗎?
當然是要重新寫過目錄
--1. 建立分割函數----------------------------------------
CREATE PARTITION FUNCTION 價錢分割(SMALLMONEY)
AS RANGE LEFT --也可以RIGHT
FOR VALUES(20,40,80)
GO
--left跟right的差別很簡單,資料要被在區間值上的左邊還是右邊
--以本例來說是放左邊,所以價錢是20會放入在第1組
--以時間而言,例如午夜12點,就會放在右邊
--這邊有3個區間值,所以會被切成4份
--2. 建立分割結構----------------------------------------
CREATE PARTITION SCHEME 價錢結構
AS PARTITION 價錢分割
TO([PRIMARY],會計群,人事群,行銷群) --以群來分組
--TO([PRIMARY],[PRIMARY],[PRIMARY],會計群) --也可以3個在同群
--TO([PRIMARY],會計群,人事群,行銷群,預備群) --也可以多1個,若最後一組還想分割時會預設放入
--ALL TO([PRIMARY]) --當然對可以全都在同一群
GO
--3. 建立分割表----------------------------------------
CREATE TABLE 巨巨分割
(
產品編號 INT,
產品名 NCHAR(5),
售價 SMALLMONEY
)
ON 價錢結構(售價) --以前是on在群上,現在在分割結構上
GO
--測試一下
SELECT * FROM 巨巨分割
--將巨巨表倒入
INSERT INTO 巨巨分割
SELECT * FROM 練練.dbo.匠匠
--新增一筆
INSERT INTO 巨巨分割 VALUES(26,'卡拉酒母',35)
--查看組別
SELECT *,$PARTITION.價錢分割(售價) AS 組別
FROM 巨巨分割
如此即完成:
- 依價錢切割
- 20以下、20~40間、40~80間、80以上
- 位置在: [PRIMARY]、會計群、人事群、行銷群
的分割表,看樣子似乎不錯
假設今天物價上揚,當年的20以下跟現在的40以下差不多
而且資料舊了,那這時就會有「區間滑動」問題
希望能做到:
- 將"20以下"跟"20~40間"二個表結合
- 80以上的再多切成:"80~100間"及"100以上"二個表
最後是測試SWITCH交換的功能
交換就是換個空白的表到某個區間
並將該區間原資料換出來
交換表也可以是別的表的區間表,也就是說
可以2個表的區間表做交換
--會造成資料的實際搬移
ALTER PARTITION FUNCTION 價錢分割()
MERGE RANGE(20) --結合區間值為20的2個表
--切割組別
--先指定新分割表的群組
ALTER PARTITION SCHEME 價錢結構 NEXT USED 會計群
ALTER PARTITION FUNCTION 價錢分割()
SPLIT RANGE(100) --切割區間值為100的表
--交換(SWITCH)
--1. 欲交換的目的地表必須與原分割表的結構一模一樣
--2. 欲交換的目的地表必須是空的
--3. 欲交換的目的地表與分割表欲交換的組別表需位於相同的檔案群組
DROP TABLE 巨巨交換表
CREATE TABLE 巨巨交換表
(
產品編號 INT,
產品名 NCHAR(5),
售價 SMALLMONEY
)
ON 會計群
SELECT * FROM 巨巨交換表
ALTER TABLE 巨巨分割 SWITCH PARTITION 3 TO 巨巨交換表 --PARTITION 2


留言
張貼留言