sqlserver表分区
生活随笔
收集整理的這篇文章主要介紹了
sqlserver表分区
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
原理就類(lèi)似于把一個(gè)表的資 料放在不同的分區(qū)里面,當(dāng)查詢(xún)時(shí),如果都在同一個(gè)單獨(dú)的分區(qū)內(nèi)的話,就不用進(jìn)行全表掃描,因此在這些情況下可以提高查詢(xún)的效率,但如果所有分區(qū)都要查詢(xún)所 有資料的話,分區(qū)并不會(huì)提高效率.
--創(chuàng)建分區(qū)表過(guò)程一共分為三步:創(chuàng)建分區(qū)函數(shù)、創(chuàng)建分區(qū)方案、創(chuàng)建分區(qū)表 USE [CardID] GO BEGIN TRANSACTION ----創(chuàng)建分區(qū)函數(shù) 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') --查看分區(qū)函數(shù)是否創(chuàng)建成功--select * from sys.partition_functions --創(chuàng)建分區(qū)方案 關(guān)聯(lián)到分區(qū)函數(shù) CREATE PARTITION SCHEME [Slotecard] AS PARTITION [SlotecardFunction] TO ([PRIMARY], [fg1], [fg2], [fg3], [fg4], [fg5], [fg6], [fg7])--查看已創(chuàng)建的分區(qū)方案 --select * from sys.partition_schemes ALTER TABLE [dbo].[ak_SloteCardTimes] DROP CONSTRAINT [PK_ak_SloteCardTimes] --這里要注意一個(gè)語(yǔ)法,因?yàn)楝F(xiàn)在表已經(jīng)存在了,那么就不能再通過(guò)CREATE TABLE的方式來(lái)創(chuàng)建分區(qū)表了,而是通過(guò)創(chuàng)建一個(gè)聚集索引的方式。但又把它刪除掉。 --但是,如果表上面已經(jīng)有一個(gè)聚集索引呢?肯定會(huì)出錯(cuò),因?yàn)橐粋€(gè)表只能有一個(gè)聚集索引。那么該怎么辦呢? --我們發(fā)現(xiàn)向?qū)?huì)這樣做,先把原先的聚集索引改為非聚聚的。 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]--創(chuàng)建聚集索引 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
除了提供了創(chuàng)建分區(qū)的向?qū)е?#xff0c;還有一個(gè)管理分區(qū)的向?qū)?#xff0c;主要是可以做SWITCH,MERGE,SPLIT這些操作。也可以查看數(shù)據(jù) 也可以手動(dòng)創(chuàng)建新的分區(qū)臨時(shí)表
select $PARTITION.Slotecard([SloteCardTime]) as 分區(qū)編號(hào),count([RecordID]) as 記錄數(shù) from [ak_SloteCardTimes] group by $PARTITION.Slotecard([SloteCardTime]) -- 查詢(xún)某個(gè)分區(qū) --這里我們要用到$PARTITION 函數(shù),這個(gè)函數(shù)可以幫助我們查詢(xún)某個(gè)分區(qū)的數(shù)據(jù),還可以檢索某個(gè)值所隸屬的分區(qū)號(hào)。$PARTITION 函數(shù)的進(jìn)一步細(xì)節(jié)可以查看MSDN --查詢(xún)已分區(qū)表Order的第一個(gè)分區(qū),代碼如下:select*from [ak_SloteCardTimes] where $partition.Slotecard([SloteCardTime])=1?
轉(zhuǎn)載于:https://www.cnblogs.com/Warmsunshine/p/3636262.html
總結(jié)
以上是生活随笔為你收集整理的sqlserver表分区的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 一步步学习微软InfoPath2010和
- 下一篇: android IntentServic