博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.GB级数据库分区实现高性能
阅读量:6084 次
发布时间:2019-06-20

本文共 2238 字,大约阅读时间需要 7 分钟。

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

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

第二,创建文件组:根据规则,将每一条规则对应一个文件(物理文件,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/archive/2012/10/07/2714515.html

你可能感兴趣的文章
软件验收测试通过准则
查看>>
linux字符设备驱动学习笔记(一):简单的字符设备驱动
查看>>
Lowest Common Ancestor of a Binary Search Tree
查看>>
BZOJ 3940 AC自动机
查看>>
POJ 2110 二分+暴搜
查看>>
线程锁Lock
查看>>
SpringMvc 文件上传后台处理
查看>>
WEB框架Django之Form组件
查看>>
spring cloud学习(一) 服务注册
查看>>
Java多线程
查看>>
洛谷P3296 刺客信条
查看>>
vue-cli2 和vue-cli3
查看>>
python 清空list的几种方法
查看>>
2.03 按子串排序
查看>>
gridview单元格合并解决方法
查看>>
Android深入浅出系列之服务机制—1.Android中的Service
查看>>
Android深入浅出系列之Android开发环境搭建—配置Eclipse(五)
查看>>
设计模式漫谈之中介者模式
查看>>
ubuntu18.04 and Linux mint 19安装virtualbox
查看>>
ElasticSeaarch 遇到的问题 (-)
查看>>