sqlserver表分区
生活随笔
收集整理的這篇文章主要介紹了
sqlserver表分区
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原理就類似于把一個表的資 料放在不同的分區里面,當查詢時,如果都在同一個單獨的分區內的話,就不用進行全表掃描,因此在這些情況下可以提高查詢的效率,但如果所有分區都要查詢所 有資料的話,分區并不會提高效率.
--創建分區表過程一共分為三步:創建分區函數、創建分區方案、創建分區表 USE [CardID] GO BEGIN TRANSACTION ----創建分區函數 CREATE PARTITION FUNCTION [SlotecardFunction](datetime) AS RANGE left FOR VALUES (N'2014-03-26T00:00:00', N'2014-04-26T00:00:00', N'2014-05-26T00:00:00', N'2014-06-26T00:00:00', N'2014-07-26T00:00:00', N'2014-08-26T00:00:00', N'2014-09-26T00:00:00') --查看分區函數是否創建成功--select * from sys.partition_functions --創建分區方案 關聯到分區函數 CREATE PARTITION SCHEME [Slotecard] AS PARTITION [SlotecardFunction] TO ([PRIMARY], [fg1], [fg2], [fg3], [fg4], [fg5], [fg6], [fg7])--查看已創建的分區方案 --select * from sys.partition_schemes ALTER TABLE [dbo].[ak_SloteCardTimes] DROP CONSTRAINT [PK_ak_SloteCardTimes] --這里要注意一個語法,因為現在表已經存在了,那么就不能再通過CREATE TABLE的方式來創建分區表了,而是通過創建一個聚集索引的方式。但又把它刪除掉。 --但是,如果表上面已經有一個聚集索引呢?肯定會出錯,因為一個表只能有一個聚集索引。那么該怎么辦呢? --我們發現向導會這樣做,先把原先的聚集索引改為非聚聚的。 ALTER TABLE [dbo].[ak_SloteCardTimes] ADD CONSTRAINT [PK_ak_SloteCardTimes] PRIMARY KEY NONCLUSTERED ([RecordID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]--創建聚集索引 CREATE CLUSTERED INDEX [ClusteredIndex_on_Slotecard_635317831823593750] ON [dbo].[ak_SloteCardTimes] ([SloteCardTime] )WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [Slotecard]([SloteCardTime])--刪除聚集索引 DROP INDEX [ClusteredIndex_on_Slotecard_635317831823593750] ON [dbo].[ak_SloteCardTimes] WITH ( ONLINE = OFF )COMMIT TRANSACTION
除了提供了創建分區的向導之外,還有一個管理分區的向導,主要是可以做SWITCH,MERGE,SPLIT這些操作。也可以查看數據 也可以手動創建新的分區臨時表
select $PARTITION.Slotecard([SloteCardTime]) as 分區編號,count([RecordID]) as 記錄數 from [ak_SloteCardTimes] group by $PARTITION.Slotecard([SloteCardTime]) -- 查詢某個分區 --這里我們要用到$PARTITION 函數,這個函數可以幫助我們查詢某個分區的數據,還可以檢索某個值所隸屬的分區號。$PARTITION 函數的進一步細節可以查看MSDN --查詢已分區表Order的第一個分區,代碼如下:select*from [ak_SloteCardTimes] where $partition.Slotecard([SloteCardTime])=1?
轉載于:https://www.cnblogs.com/Warmsunshine/p/3636262.html
總結
以上是生活随笔為你收集整理的sqlserver表分区的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一步步学习微软InfoPath2010和
- 下一篇: android IntentServic