使用SQL Server 2008提供的表分区向导

本文介绍了如何使用SQL Server 2008提供的表分区向导进行表分区的操作,包括创建分区函数、分区架构及分区表,并讨论了在已有数据的表上创建分区的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

该篇文章是我于2009年6月10日通过自己编写的工具,批量从位于在博客园的博客站点(http://chenxizhang.cnblogs.com)同步而来。文章中的图片地址仍然是链接到博客园的。特此说明!

陈希章

原文地址:http://www.cnblogs.com/chenxizhang/archive/2009/04/29/1445834.html
原文标题:使用SQL Server 2008提供的表分区向导
原文发表:2009/4/29 0:22:00

表分区(Partition Table)是自从SQL Server 2005就开始提供的功能,解决的问题是大型表的存储和查询。

image image image image

我们之前大致的语法是这样的

-- =========================

-- 演示:陈希章

-- 如何创建分区函数

-- 如何创建分区架构

-- 如何创建分区表

--=========================

alter database adventureWorks add filegroup [fg1]

go

alter database adventureWorks add filegroup [fg2]

go

alter database adventureWorks add filegroup [fg3]

go

alter database adventureWorks

add file

(name='fg1',

filename='c:/fg1.ndf',

size=5mb)

to filegroup [fg1]

go

alter database adventureWorks

add file

(name='fg2',

filename='d:/fg2.ndf',

size=5mb)

to filegroup [fg2]

go

alter database adventureWorks

add file

(name='fg3',

filename='e:/fg3.ndf',

size=5mb)

to filegroup [fg3]

go

use adventureWorks

go

Create partition function emailPF(nvarchar(50)) as range right for values ('G','N')--创建分区函数

go

Create partition scheme emailPS as partition emailPF to (fg1,fg2,fg3)--创建分区方案

go

Create table customermail (custid int, email nvarchar(50)) on emailPS(email)--创建分区表

Go

 

 

为了简化操作,SQL Server 2008中为表分区提供了相关的操作

image

image

image

image

image

image

这个向导有些诡异,居然希望表里面已经有数据。(费解)

image 

image

最后生成的脚本是这样的

USE [demo]
GO
BEGIN TRANSACTION
CREATE PARTITION FUNCTION [ordersfunction](date) AS RANGE LEFT FOR VALUES (N'2008-01-01', N'2008-02-01', N'2008-03-01')

CREATE PARTITION SCHEME [ordersscheme] AS PARTITION [ordersfunction] TO ([PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY])

CREATE CLUSTERED INDEX [ClusteredIndex_on_ordersscheme_633765890752500000] ON [dbo].[Orders]
(
    [OrderDate]
)WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [ordersscheme]([OrderDate])

DROP INDEX [ClusteredIndex_on_ordersscheme_633765890752500000] ON [dbo].[Orders] WITH ( ONLINE = OFF )

COMMIT TRANSACTION

这里要注意一个语法,因为现在表已经存在了,那么就不能再通过CREATE TABLE的方式来创建分区表了,而是通过创建一个聚集索引的方式。但又把它删除掉。

但是,如果表上面已经有一个聚集索引呢?肯定会出错,因为一个表只能有一个聚集索引。那么该怎么办呢?

我们发现向导会这样做,先把原先的聚集索引改为非聚聚的。这很有点意思嘛

ALTER TABLE [dbo].[Orders] ADD  CONSTRAINT [PK_Orders] PRIMARY KEY NONCLUSTERED
(
    [OrderId] 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]

 

除了提供了创建分区的向导之外,还有一个管理分区的向导,主要是可以做SWITCH,MERGE,SPLIT这些操作。也可以查看数据

image

image

image 

 

除了这些图形化工具的支持之外,SQL Server 2008的分区表还有不少增强,诸如性能等等方面

http://technet.microsoft.com/zh-cn/library/ms345599.aspx

作者:陈希章
出处:http://blog.youkuaiyun.com/chen_xizhang
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值