当前位置: 代码迷 >> SQL >> mssql 拔高性能 - 分区表
  详细解决方案

mssql 拔高性能 - 分区表

热度:364   发布时间:2016-05-05 13:03:35.0
mssql 提高性能 - 分区表
/*
为数据库[Mydb]添加4个文件组
*/
ALTER DATABASE Mydb ADD FILEGROUP [MydbSF1]
ALTER DATABASE Mydb
ADD FILE 
(NAME ='MydbSF1',
FILENAME = 'D:\db\fabuTb\1\MydbSF1.ndf',
FILEGROWTH=1,
MAXSIZE = UNLIMITED
)TO FILEGROUP 
ALTER DATABASE Mydb ADD FILEGROUP [MydbSF2]
ALTER DATABASE Mydb
ADD FILE 
(NAME = N'MydbSF2',
FILENAME = 'D:\db\fabuTb\2\MydbSF2.ndf',
FILEGROWTH=1,
MAXSIZE = UNLIMITED)
TO FILEGROUP 
ALTER DATABASE Mydb ADD FILEGROUP [MydbSF3]
ALTER DATABASE Mydb
ADD FILE 
(NAME = N'MydbSF3',
FILENAME = N'D:\db\fabuTb\3\MydbSF3.ndf',
FILEGROWTH=1,
MAXSIZE = UNLIMITED)
TO FILEGROUP 
ALTER DATABASE Mydb ADD FILEGROUP [MydbSF4]
ALTER DATABASE Mydb
ADD FILE
(NAME = N'MydbSF4',
FILENAME = N'D:\db\fabuTb\4\MydbSF4.ndf',
FILEGROWTH=1,
MAXSIZE = UNLIMITED)
TO FILEGROUP [MydbSF4]
/*
添加文件组结束
*/
--创建分区函数
/*
以数据库表中ID为参考,此处是以1~10,11~20,
21~30,31~&做为4个表分区的界限
*/
CREATE PARTITION FUNCTION pf_Product_Sell (int)
AS RANGE RIGHT FOR VALUES (10, 20, 30)
/*
将分区界限分别放入4个不同的文件组中
*/
CREATE PARTITION SCHEME [ps_Product_SchemeSell] AS PARTITION
pf_Product_fabu TO (MydbSF1,MydbSF2,MydbSF3,MydbSF4)
--创建表(在文件组的表分区上)
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Sell](
[id] [int] IDENTITY(1,1) NOT NULL,
[userid] [int] NOT NULL
CONSTRAINT [PK_Sell] PRIMARY KEY CLUSTERED 
(
[id] ASC
)WITH (PAD_INDEX   = OFF, STATISTICS_NORECOMPUTE   = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS   = ON, ALLOW_PAGE_LOCKS   = ON) ON [ps_Product_SchemeSell]([id])
)
/*
然后大家可以插入数据...
然后用下面的那个查询语句查看PF中的值
是否已经吧不同数据放在不同的分区中了
*/
SELECT *, $PARTITION.[pf_Product_Sell](ID) AS PF
FROM sell
/*
需要注意的在创建分组文件的时候.必须设置自动增长
并且不要最大值设置为不限,否则在插入数据的时候回
出现错误.
*/

这样处理的时候像上10G以上单表的数据操作不必每次操作超大的数据库文件了.
而且对 I/O 物理磁盘的瓶颈能有效的减轻.

SQL 2005 更多功能继续发觉中来自: http://www.52mvc.com/showtopic-550.aspx
  相关解决方案