sqlserver 表分區


sqlserver 表分區

 
復制代碼
 
           

什么是表分區

 
           

一般情況下,我們建立數據庫表時,表數據都存放在一個文件里。

 
           

但是如果是分區表的話,表數據就會按照你指定的規則分放到不同的文件里,把一個大的數據文件拆分為多個小文件,還可以把這些小文件放在不同的磁盤下由多個cpu進行處理。這樣文件的大小隨着拆分而減小,還得到硬件系統的加強,自然對我們操作數據是大大有利的。

 
           

所以大數據量的數據表,對分區的需要還是必要的,因為它可以提高select效率,還可以對歷史數據經行區分存檔等。但是數據量少的數據就不要湊這個熱鬧啦,因為表分區會對數據庫產生不必要的開銷,除啦性能還會增加實現對象的管理費用和復雜性。


--XXXX 為數據庫 --1、創建數據庫文件組 alter database XXXX add filegroup XXXX2020 alter database XXXX add filegroup XXXX2021 alter database XXXX add filegroup XXXX2022 alter database XXXX add filegroup XXXX2023 alter database XXXX add filegroup XXXX2024 alter database XXXX add filegroup XXXX2025 go --2、添加存儲文件 alter database XXXX add file (name=N'XXXX2020',filename=N'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA\XXXX2020.ndf',size=5Mb,filegrowth=5mb) to filegroup XXXX2020 alter database XXXX add file (name=N'XXXX2021',filename=N'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA\XXXX2021.ndf',size=5Mb,filegrowth=5mb) to filegroup XXXX2021 alter database XXXX add file (name=N'XXXX2022',filename=N'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA\XXXX2022.ndf',size=5Mb,filegrowth=5mb) to filegroup XXXX2022 alter database XXXX add file (name=N'XXXX2023',filename=N'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA\XXXX2023.ndf',size=5Mb,filegrowth=5mb) to filegroup XXXX2023 alter database XXXX add file (name=N'XXXX2024',filename=N'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA\XXXX2024.ndf',size=5Mb,filegrowth=5mb) to filegroup XXXX2024 alter database XXXX add file (name=N'XXXX2025',filename=N'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA\XXXX2025.ndf',size=5Mb,filegrowth=5mb) to filegroup XXXX2025 --分區存儲 GO BEGIN TRANSACTION CREATE PARTITION FUNCTION [CreateTime](datetime) AS RANGE RIGHT FOR VALUES (N'2020-01-01T00:00:00', N'2021-01-01T00:00:00', N'2022-01-01T00:00:00', N'2023-01-01T00:00:00', N'2024-01-01T00:00:00', N'2025-01-01T00:00:00') CREATE PARTITION SCHEME [CreateTime] AS PARTITION [CreateTime] TO ([PRIMARY], [XXXX2020], [XXXX2021], [XXXX2022], [XXXX2023], [XXXX2024], [XXXX2025]) CREATE CLUSTERED INDEX [ClusteredIndex_on_CreateTime_637401672488268535] ON [dbo].[XXX_TABLE] ( [CREATE_DATE] )WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [CreateTime]([CREATE_DATE]) DROP INDEX [ClusteredIndex_on_CreateTime_637401672488268535] ON [dbo].[XXX_TABLE] COMMIT TRANSACTION --后期 添加新的分區 go --准備一個文件組來保存新分區的數據 alter database XXXX add filegroup XXXX2026 alter database XXXX add file (name=N'XXXX2026',filename=N'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA\XXXX2026.ndf',size=5Mb,filegrowth=5mb) to filegroup XXXX2026 go ALTER PARTITION SCHEME CreateTime NEXT USED XXXX2026 --定義邊界 ALTER PARTITION FUNCTION CreateTime() SPLIT RANGE ('2026-01-01T00:00:00') --分區合並 及刪除分區 alter partition function CreateTime() merge range('2026-01-01T00:00:00') --分區數據查詢 select $partition.CreateTime(CREATE_DATE) as Patition,COUNT(*) countRow from XXX_TABLE group by $partition.CreateTime(CREATE_DATE) --查詢不同分區 SELECT * FROM XXX_TABLE WHERE $partition.CreateTime(CREATE_DATE) = 2
復制代碼

使用SQL Server Management Studio 管理工具創建分區:

選中表 鼠標右鍵

 

 

 

 

 

 

 

 

 這里我選擇時間 分區

 

 

 

 

 

 

左邊界右邊界:就是把臨界值划分給上一個分區還是下一個分區。一個小於號(右邊界),一個小於等於號(左邊界)

例如:  A<'2020-01-01 00:00:00' 右邊界 2020年之前的數據,A<='2019-12-31 23:59:59 ' (左邊界) 2020年之前的數據

時間分區一般采用右邊界。

 

 

 

 

 

 

 

可以直接執行,也可以把腳本生成出來手動執行。

如果另一個表需要采用同一種規則 可以采用之前的分區方案。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM