日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL SERVER 表分区

發布時間:2023/11/29 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL SERVER 表分区 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.?概要說明

SQL?SERVER的表分區功能是為了將一個大表(表中含有非常多條數據)的數據根據某條件(僅限該表的主鍵)拆分成多個文件存放,以提高查詢數據時的效率。創建表分區的主要步驟是1、確定需要以哪一個字段作為分區條件;2、拆分成多少個文件保存該表;3、分區函數(拆分條件);4、分區方案(按拆分函數拆分后需要對應到哪些文件組中去)。

下面就一步一步來說明如何創建表分區:

2.?準備工作

創建一個測試表

CREATE TABLE Sale( [Id] [int] IDENTITY(1,1) NOT NULL, --自動增長 [Name] [varchar](16) NOT NULL, [SaleTime] [datetime] NOT NULL, CONSTRAINT [PK_Sale] PRIMARY KEY CLUSTERED --創建主鍵 ( [Id] ASC ) )

插入測試數據

insert Sale ([Name],[SaleTime]) values ('張三','2009-1-1') ? insert Sale ([Name],[SaleTime]) values ('李四','2009-2-1') ? insert Sale ([Name],[SaleTime]) values ('王五','2009-3-1') ? insert Sale ([Name],[SaleTime]) values ('錢六','2012-4-1') ? insert Sale ([Name],[SaleTime]) values ('趙七','2012-6-1') ? insert Sale ([Name],[SaleTime]) values ('張三','2012-6-1') ? insert Sale ([Name],[SaleTime]) values ('李四','2012-7-1') ? insert Sale ([Name],[SaleTime]) values ('王五','2012-8-1') ? insert Sale ([Name],[SaleTime]) values ('錢六','2012-10-1') ? insert Sale ([Name],[SaleTime]) values ('趙七','2012-10-1') ? insert Sale ([Name],[SaleTime]) values ('張三','2012-11-1') ? insert Sale ([Name],[SaleTime]) values ('李四','2013-12-1') ? insert Sale ([Name],[SaleTime]) values ('王五','2014-12-1')

?

3.?實現步驟

主鍵設置

表分區需要先確定一個字段,按此字段的某個條件進行拆分,我們這里以Saletime列為例,按月為單位對Sale表進行拆分。因為需要拆分的列必須是主鍵,所以我們這里先刪除原來建表時對ID字段創建的主鍵,改為SaleTime字段(注意用非聚集主鍵)

1)修改表

?

2)移除主鍵

?

3)新建主鍵

?

4)設置關聯

?

因為主鍵要求唯一性,所以這里需要做2個字段的關聯主鍵(IDSaleTime

?

5)修改主鍵為非聚集

?

成功后的效果

?

完成后記得保存表

創建文件組和數據文件

因為表分區時按照文件組為單位保存了,而實際數據是保存在這個文件組所包含的文件中的,所以為了高效率,可以一個文件組對應一個數據文件來保存數據,下面我們以月為單位創建文件組

?

到這里已經把文件組和數據文件創建完畢并建立了對應關系,點擊確定鍵后,在對應的目錄下可以看到已經生成了我們設定的12個數據文件了。

?

創建分區函數(無法可視化實現)

-- 第四步 創建分區函數 CREATE PARTITION FUNCTION partfunSale (DATETIME) AS RANGE RIGHT FOR VALUES ( '2012-02-01','2012-03-01','2012-04-01','2012-05-01','2012-06-01', '2012-07-01','2012-08-01','2012-09-01','2012-10-01','2012-11-01','2012-12-01' )

上面這段的含義是創建一個以Datetime字段類型的分區函數,需要注意的是12個文件組對應11Values,因為分區的規則是

文件組1?———》2012-02-01之前的數據(日期>2012-02-01
文件組2?———》2012-02-01之后2012-03-01之前的數據(2012-02-01≤日期<2012-03-01
文件組3?———》2012-03-01之后2012-04-01之前的數據(2012-02-01≤日期<2012-03-01
文件組4?———》2012-04-01之后2012-05-01之前的數據(2012-02-01≤日期<2012-03-01)
文件組5?———》2012-05-01之后2012-06-01之前的數據(2012-02-01≤日期<2012-03-01
文件組6?———》2012-06-01之后2012-07-01之前的數據(2012-02-01≤日期<2012-03-01
文件組7?———》2012-07-01之后2012-08-01之前的數據(2012-02-01≤日期<2012-03-01
文件組8?———》2012-08-01之后2012-09-01之前的數據(2012-02-01≤日期<2012-03-01
文件組9?———》2012-09-01之后2012-10-01之前的數據(2012-02-01≤日期<2012-03-01
文件組10?———》2012-10-01之后2012-11-01之前的數據(2012-02-01≤日期<2012-03-01
文件組11?———》2012-11-01之后2012-12-01之前的數據(2012-02-01≤日期<2012-03-01
文件組12?———》2012-12-01之后的數據(2012-02-01≤日期<2012-03-01

?創建分區方案(無法可視化實現)

將創建的分區函數與文件組進行關聯

-- 第四步 創建分區方案(注意要比分區函數多一項) CREATE PARTITION SCHEME partschSale AS PARTITION partfunSale TO ( Saletime201201, Saletime201202, Saletime201203, Saletime201204, Saletime201205, Saletime201206, Saletime201207, Saletime201208, Saletime201209, Saletime201210, Saletime201211, Saletime201212 )

關聯到表(無法可視化實現)

將設置好的分區方案與具體的表進行關聯

-- 第五步 設置分區方案到指定表 CREATE CLUSTERED INDEX CT_Sale ON Sale([SaleTime]) ON partschSale([SaleTime])

其中Sale是表名,SaleTime是拆分時依據的字段,partschSale是分區方案

創建好了以后在數據庫中右鍵表名點擊屬性可以查看到類似如下的效果表示創建成功

統計各數據組中包含的數據條數

-- 統計所有分區表中的記錄總數 select $PARTITION.partfunSale(SaleTime) as 分區編號,count(id) as 記錄數from Sale group by $PARTITION.partfunSale(SaleTime)

?引自:http://www.cnblogs.com/Excellent/archive/2013/01/05/2846799.html



本文轉自 netcorner 博客園博客,原文鏈接:http://www.cnblogs.com/netcorner/p/3727199.html?? ,如需轉載請自行聯系原作者

總結

以上是生活随笔為你收集整理的SQL SERVER 表分区的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。