sqlserver表分区
原理就类似于把一个表的资 料放在不同的分区里面,当查询时,如果都在同一个单独的分区内的话,就不用进行全表扫描,因此在这些情况下可以提高查询的效率,但如果所有分区都要查询所 有资料的话,分区并不会提高效率.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 |
--创建分区表过程一共分为三步:创建分区函数、创建分区方案、创建分区表 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] (<br> [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这些操作。也可以查看数据 也可以手动创建新的分区临时表
1
2
3
4
5
6
7
8 |
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 |
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。