sqlserver 表分割槽-datetime 時間欄位分割槽案例
1,建立檔案組
USE [master] GO ALTER DATABASE [test] ADD FILEGROUP [datetime1] GO ALTER DATABASE [test] ADD FILEGROUP [datetime2] GO ALTER DATABASE [test] ADD FILEGROUP [datetime3] GO ALTER DATABASE [test] ADD FILEGROUP [datetime4] GO ALTER DATABASE [test] ADD FILEGROUP [datetime5] GO
USE [master] GO ALTER DATABASE [test] ADD FILE ( NAME = N't4_1', FILENAME = N'D:\SQLData\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\test\t4_1.ndf' , SIZE = 8192KB , FILEGROWTH = 65536KB ) TO FILEGROUP [datetime1] GO ALTER DATABASE [test] ADD FILE ( NAME = N't4_2', FILENAME = N'D:\SQLData\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\test\t4_2.ndf' , SIZE = 8192KB , FILEGROWTH = 65536KB ) TO FILEGROUP [datetime2] GO ALTER DATABASE [test] ADD FILE ( NAME = N't4_3', FILENAME = N'D:\SQLData\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\test\t4_3.ndf' , SIZE = 8192KB , FILEGROWTH = 65536KB ) TO FILEGROUP [datetime3] GO ALTER DATABASE [test] ADD FILE ( NAME = N't4_4', FILENAME = N'D:\SQLData\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\test\t4_4.ndf' , SIZE = 8192KB , FILEGROWTH = 65536KB ) TO FILEGROUP [datetime4] GO ALTER DATABASE [test] ADD FILE ( NAME = N't4_5', FILENAME = N'D:\SQLData\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\test\t4_5.ndf' , SIZE = 8192KB , FILEGROWTH = 65536KB ) TO FILEGROUP [datetime5] GO 如果要刪除資料檔案到檔案組可以使用 alter database test remove file test01
2,建立分割槽函式 剛才也說了,我們是按照時間進行切分的,將資料表資料分成 1,2018 年 2,2019 年 3,2020 年 4,2021 年 5,2022 年以後
create partition function [PF_card] (datetime) as range left for values ('2018-01-01','2019-01-01','2020-01-01','2021-01-01')
如果要刪除分割槽函式 drop partition function [PF_card]
3,有了分割槽函式後,需要指定不同分割槽的資料放到哪個檔案組中 CREATE PARTITION SCHEME [PS_card] AS PARTITION [PF_card] TO ([PRIMARY], [datetime1], [datetime2], [datetime3], [datetime4])
從上面的sql,我們可以看到三個點將時間軸分成了4段 第一:PF_card 為分組函式名。
第二:left 其實就是當時間點在邊界時到底屬於左側還是右側,因為這裡是left,所以屬於左側,如果是right關鍵詞,那就屬於右側了。
4:編寫分割槽方案 分割槽方案也就是將分割槽函式與檔案組進行一個關聯,剛才也說了,4個時間點將一個時間軸分成了4部分,剛好對應了5個檔案組。
那麼具體的sql寫法如下:
create partition scheme RangeSchema_CreateTime as partition PF_card to (datetime1,datetime2,datetime3,datetime4)
5:建立分割槽表 跟普通表建立有點不一樣,分割槽表的建立還需要指定這個分割槽需要使用哪個分割槽方案下的分割槽欄位,那麼這裡就是RangeSchema_CreateTime
中的CreateTime欄位。 create table Shop ( ID varchar(50), ShopName varchar(50), CreateTime datetime ) on RangeSchema_CreateTime(CreateTime)
這裡要注意,如果在建立表的時候指定了ID為主鍵的話,這個時候需要指定ID為分割槽欄位,否則會報錯的。 這時候可以在不要主鍵的情況下先建立表,然後再指定ID為主鍵。
6:插入測試資料並統計
這裡我先插入10w條資料,然後來看看資料在各個分割槽的情況。 ?declare @i int ?set @i = 1 ? ?while @i < 100000 ?begin insert into equipment_n values(@i,dateadd(dd,datediff(dd,'2012-01-01','2015-01-30')*RAND(),'2012-01-01'),1,@i+1,@i+2,@i+3) ?set @i = @i +1 ?end
7,統計每個分割槽的資料量
這裡主要有一個查詢分割槽的關鍵字“$partition”,非常的有用 select $partition.RangeTime(operaDate) as number, COUNT(*) as count from equipment_n group by $partition.RangeTime(operaDate)
好了,到這個我們通過sql語句來實現分割槽表就已經完成了