.GB级数据库分区实现高性能

对于大容量数据库表,且有一定业务规则的(比如有时间规则)可作如下分区,以提升综合性能

 第一,创建分区函数:根据业务规则创建(比如一个月分一个或几个月分一个)

第二,创建文件组:根据规则,将每一条规则对应一个文件(物理文件,NDF)

第三,创建建立分区架构,用来将概念上的分区和文件组(物理文件)关联起来

第四,建立分区表

以上做完,当执行INSERT时,分区表会根据分区架构将记录插入不同的NDF文件中;当执行SELECT时,分区表也会根据分区架构从不同的NDF中查寻。

具体实现如下:

CREATE PARTITION FUNCTION FiveYearDateRangePFN(datetime)
AS
RANGE LEFT FOR VALUES (
'20100930 23:59:59.997',   -- 2010年9 月
'20101031 23:59:59.997',   -- 2010年10 月
'20101130 23:59:59.997',   -- 2010年11 月
'20101231 23:59:59.997'    -- 2010年12 月
)
GO
ALTER DATABASE TEST01 ADD FILEGROUP [Test201009]
ALTER DATABASE TEST01 ADD FILEGROUP [Test201010]
ALTER DATABASE TEST01 ADD FILEGROUP [Test201011]
ALTER DATABASE TEST01 ADD FILEGROUP [Test201012]
GO
ALTER DATABASE TEST01
ADD FILE
(NAME = N'Test201009',FILENAME = N'D:\DataFileGroup\Test201009.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB)
TO FILEGROUP [Test201009]
GO
ALTER DATABASE TEST01
ADD FILE
(NAME = N'Test201010',FILENAME = N'D:\DataFileGroup\Test201010.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB)
TO FILEGROUP [Test201010]
GO
ALTER DATABASE TEST01
ADD FILE
(NAME = N'Test201011',FILENAME = N'D:\DataFileGroup\Test201011.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB)
TO FILEGROUP [Test201011]
go
ALTER DATABASE TEST01
ADD FILE
(NAME = N'Test201012',FILENAME = N'D:\DataFileGroup\Test201012.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB)
TO FILEGROUP [Test201012]
GO
CREATE PARTITION SCHEME [FiveYearDateRangePScheme]
AS
PARTITION FiveYearDateRangePFN TO
(
[Test201009],[Test201010],[Test201011],[Test201012],[PRIMARY]
)
GO
CREATE TABLE [dbo].[Test](
    [ID] [uniqueidentifier] NOT NULL,
    [Name] [nvarchar](10) COLLATE Chinese_PRC_CI_AS NULL,
    [Date] [datetime] NOT NULL      
) ON FiveYearDateRangePScheme(Date)
ALTER TABLE [Test]
ADD CONSTRAINT [ObjTeaching_PK] PRIMARY KEY CLUSTERED ([ID], [Date])
go
insert into Test(id,name,date) values(newid(),'20100901','2010-09-01')
insert into Test(id,name,date) values(newid(),'20101001','2010-10-01')
insert into Test(id,name,date) values(newid(),'20101101','2010-11-01')
insert into Test(id,name,date) values(newid(),'20101201','2010-12-01')
select $partition.FiveYearDateRangePFN(date),date,*
from Test a
order by a.date asc
GO

原文地址:https://www.cnblogs.com/bobsoft/p/2714515.html