转自:http://blog.youkuaiyun.com/pingpinghi/article/details/4043496
在Microsoft SqlServer 2005企业版中提供了分区表的功能。分区表是指按照数据水平方式分区,将数据分布于一个数据库的多个不同的文件组中。
MSSQL2005的表分区功能是针对超大型数据库(从百GB级和TB级)而设计的。通过采取分区技术,对于数据子集的执行的维护操作只是针对所需数据表而不是整个表,因此可以高效的管理和访问大型表的数据子集。超大型数据库的查询性能通过分区表得到了改改善。
分区前考虑的问题
1.虽然分区可以带来众多的好处,但是同进也增加了实现对象的管理费用和复杂性。因此在进行分区之前要首先仔细的考虑以确定是否应为对象进行分区。
2.在确定了为对象进行分区后,下一步就要确定分区键和分区数。要确定分区数据,应先评估您的数据中是否存在逻辑分组和模式。
3.确定是否应使用多个文件分组。为了有助于优化性能和维护,应使用文件组分离数据。文件组是数据库数据文件的逻辑组合,它可以对数据文件进行管理和分配,以便提高数据库文件的并发访问效率。
进行分区表设计的步骤
1.创建文件组和库文件:(以AdventureWorks数据库为例)
创建文件组:ALTER DATABASE AdventureWorks ADD FILEGROUP[2009Q1]
将文件添加到文件组: ALTER DATABASE AdventureWorks
ADD FILE
(NAME=N'2009Q1',
FILENAME=N'C:/AdventureWorks/2009Q1.ndf',
SIZE=5MB,
MAXSIZE=100MB,
FILEGROWTH=5MB)
TO FILEGROUP [2009Q1]
2.创建分区函数,指定如何进行分区:(以范围分区为例)
CREATE PARTITION FUNCTION OrderDateRangePFN(datetime)
AS
RANGE LEFT FO VALUES('20090331 23:59:59.997',
'20090630 23:59:59.997',
'20090931 23:59:59.997',
'200901231 23:59:59.997')
3.创建分区架构:在创建完分区函数后,必须将其与分区架构相关联,以便将分区定向至特定的文件组。
CREATE PARTITION SCHEME OrderDatePScheme
AS
PARTITION OrderDateRangePFN
TO ([2009Q1],[2009Q2],[2009Q3],[2009Q4],[PRIMARY])
4.创建分区表:创建完分区函数(逻辑结构)和分区架构(物理结构)后,即可创建表来利用它们了。
CREATE TABLE [dbo].[OrdersRange]
([PurchaseOrderID] [int] NOT NULL,
[EmployeeID] [int] NULL,
[VendorID] [int] NULL,
[TaxAmt] [money] NULL,
[Freight] [money] NULL,
[SubTotal] [money] NULL,
[Status] [tinyint] NOT NULL ,
[RevisionNumber] [tinyint] NULL ,
[ModifiedDate] [datetime] NULL ,
[ShipMethodID] [tinyint] NULL,
[ShipDate] [datetime] NOT NULL,
[OrderDate] [datetime] NOT NULL
CONSTRAINT OrdersRangeYear
CHECK ([OrderDate] >= '20030701'
AND [OrderDate] <= '20040630 11:59:59.997'),
[TotalDue] [money] NULL
)
ON OrderDatePScheme (OrderDate)
GO
5.创建分区索引:
索引对于提高查询性能非常有效,因此,一般应该考虑应该考虑为分区表建立索引,为分区表建立索引与为普通表建立索引的语法一直,但是,其行为与普通索引有所差异。
默认情况下,分区表中创建的索引使用与分区表相同分区架构和分区列,这样,索引将于表对齐。将表与其索引对齐,可以使管理工作更容易进行,对于滑动窗口方案尤其如此。若要启动分区切换,表的所有索引都必须对齐。
当然也可以在创建索引时,指定不同的分区方案(Schema)或单独的文件组(FileGroup)来存储索引,这样SQL Server 不会将索引与表对齐。
注意:在已分区的表上创建索引(分区索引)时,应该注意以下事项:
唯一索引:建立唯一索引(聚集或者非聚集)时,分区列必须出现在索引列中。此限制将使SQL Server只调查单个分区,并确保表中 宠物的新键值。如果分区依据列不可能包含在唯一键中,则必须使用DML触发器,而不是强制实现唯一性。
非唯一索引:对非唯一的聚集索引进行分区时,如果未在聚集键中明确指定分区依据列,默认情况下SQL Server 将在聚集索引列中添加分区依据列。
对非唯一的非聚集索引进行分区时,默认情况下SQL Server 将分区依据列添加为索引的包含性列,以确保索引与基表对齐,若果索引中已经存在分区依据列,SQL Server 将不会像索引中添加分区依据列。