可以参考以下代码:
/*
功能说明:分区函数分区功能实现 XTRZB表分区
修改说明:Created BY LY 2013-1-10
*/
/*
功能说明:创建文件组
修改说明:Created BY LY 2013-1-10
*/
ALTER DATABASE QD ADD FILEGROUP XTRZB_0
ALTER DATABASE QD ADD FILE ( NAME = 'F_XTRZB_0', FILENAME = 'D:\DB\DBTest\F_XTRZB_0.MDF', SIZE =5120KB, FILEGROWTH = 10% ) TO FILEGROUP XTRZB_0;
ALTER DATABASE QD ADD FILEGROUP XTRZB_1
ALTER DATABASE QD ADD FILE ( NAME = 'F_XTRZB_1', FILENAME = 'D:\DB\DBTest\F_XTRZB_1.MDF', SIZE =5120KB, FILEGROWTH = 10% ) TO FILEGROUP XTRZB_1;
ALTER DATABASE QD ADD FILEGROUP XTRZB_2
ALTER DATABASE QD ADD FILE ( NAME = 'F_XTRZB_2', FILENAME = 'D:\DB\DBTest\F_XTRZB_2.MDF', SIZE =5120KB, FILEGROWTH = 10% ) TO FILEGROUP XTRZB_2;
ALTER DATABASE QD ADD FILEGROUP XTRZB_3
ALTER DATABASE QD ADD FILE ( NAME = 'F_XTRZB_3', FILENAME = 'D:\DB\DBTest\F_XTRZB_3.MDF', SIZE =5120KB, FILEGROWTH = 10% ) TO FILEGROUP XTRZB_3;
/*
功能说明:创建分区函数
修改说明:Created BY LY 2013-1-10
*/
IF EXISTS (SELECT *
FROM sys.partition_functions
WHERE name = N'PF_XTRZB_FirstLetter')
DROP PARTITION FUNCTION PF_XTRZB_FirstLetter
CREATE PARTITION FUNCTION PF_XTRZB_FirstLetter(DATETIME) AS RANGE RIGHT FOR VALUES ('2011/01/01', '2012/01/01', '2013/01/01')
/*
功能说明:创建分区方案
修改说明:Created BY LY 2013-1-10
*/
IF EXISTS (SELECT *
FROM sys.partition_schemes
WHERE name = N'PS_XTRZB_FirstLetter')
DROP PARTITION SCHEME PS_XTRZB_FirstLetter
CREATE PARTITION SCHEME PS_XTRZB_FirstLetter AS PARTITION PF_XTRZB_FirstLetter TO ( XTRZB_0, XTRZB_1, XTRZB_2,XTRZB_3)
/*
功能说明:分区函数引用这个分区方案
修改说明:Created BY LY 2013-1-10
*/
--ALTER TABLE XTRZB
-- DROP CONSTRAINT PK_XTRZB
CREATE CLUSTERED INDEX CLUSTERED_DT_INDEX
ON XTRZB(DT)
ON PS_XTRZB_FirstLetter(DT)
3 个回复
梁勇 - 天道酬勤、上善若水。爱好商业智能 2013-07-16 回答
赞同来自: 冰咖啡 、凉菜小妹
1、创建文件组
2、创建分区函数
3、创建分区方案
4、创建分区表,并引用对应的分区方案
可以参考以下代码:
/*
功能说明:分区函数分区功能实现 XTRZB表分区
修改说明:Created BY LY 2013-1-10
*/
/*
功能说明:创建文件组
修改说明:Created BY LY 2013-1-10
*/
ALTER DATABASE QD ADD FILEGROUP XTRZB_0
ALTER DATABASE QD ADD FILE ( NAME = 'F_XTRZB_0', FILENAME = 'D:\DB\DBTest\F_XTRZB_0.MDF', SIZE =5120KB, FILEGROWTH = 10% ) TO FILEGROUP XTRZB_0;
ALTER DATABASE QD ADD FILEGROUP XTRZB_1
ALTER DATABASE QD ADD FILE ( NAME = 'F_XTRZB_1', FILENAME = 'D:\DB\DBTest\F_XTRZB_1.MDF', SIZE =5120KB, FILEGROWTH = 10% ) TO FILEGROUP XTRZB_1;
ALTER DATABASE QD ADD FILEGROUP XTRZB_2
ALTER DATABASE QD ADD FILE ( NAME = 'F_XTRZB_2', FILENAME = 'D:\DB\DBTest\F_XTRZB_2.MDF', SIZE =5120KB, FILEGROWTH = 10% ) TO FILEGROUP XTRZB_2;
ALTER DATABASE QD ADD FILEGROUP XTRZB_3
ALTER DATABASE QD ADD FILE ( NAME = 'F_XTRZB_3', FILENAME = 'D:\DB\DBTest\F_XTRZB_3.MDF', SIZE =5120KB, FILEGROWTH = 10% ) TO FILEGROUP XTRZB_3;
/*
功能说明:创建分区函数
修改说明:Created BY LY 2013-1-10
*/
IF EXISTS (SELECT *
FROM sys.partition_functions
WHERE name = N'PF_XTRZB_FirstLetter')
DROP PARTITION FUNCTION PF_XTRZB_FirstLetter
CREATE PARTITION FUNCTION PF_XTRZB_FirstLetter(DATETIME) AS RANGE RIGHT FOR VALUES ('2011/01/01', '2012/01/01', '2013/01/01')
/*
功能说明:创建分区方案
修改说明:Created BY LY 2013-1-10
*/
IF EXISTS (SELECT *
FROM sys.partition_schemes
WHERE name = N'PS_XTRZB_FirstLetter')
DROP PARTITION SCHEME PS_XTRZB_FirstLetter
CREATE PARTITION SCHEME PS_XTRZB_FirstLetter AS PARTITION PF_XTRZB_FirstLetter TO ( XTRZB_0, XTRZB_1, XTRZB_2,XTRZB_3)
/*
功能说明:分区函数引用这个分区方案
修改说明:Created BY LY 2013-1-10
*/
--ALTER TABLE XTRZB
-- DROP CONSTRAINT PK_XTRZB
CREATE CLUSTERED INDEX CLUSTERED_DT_INDEX
ON XTRZB(DT)
ON PS_XTRZB_FirstLetter(DT)
TravyLee - 尼玛!这哪是下雨,分明就是有人在泼水! 2013-07-23 回答
赞同来自:
个人觉得, 减少单表的数据量会比较重要, 从列的方面讲,尽量不要把数据都设计放在一个表中,可以按照应用需求,把同时使用的列放在一个表中,比如一条记录可能有 a, b, c, d, e 几个列, 如果 a,b,c 和 d, e 分别用在不同的场景, 那么通常是建议设计两张表
从行的方面讲,经常使用的数据和不经常使用的数据也应该放在不同的表中(虽然分区也可以达到这个效果),但物理拆表更占优势一些, 减少了SQL Server查询优化器的判断, 提升索引的维护开销(比如可以针对不同时期的数据提供适合它们的查询条件,这个分区是做不到的),减少数据量的同时,也可以使统计信息更精确,提供查询优化器对查询方案评估的准确性(前面 xiangcong 的大表处理有一定的适用性,但是,如果查询中会常用到循环和临时表,这个似乎有数据拆分不合理之嫌,通常拆数据不是硬性按时间,如果因为这个拆分,导致一个简单的查询,变成了多个步骤,这个可能产生一定的性能影响,应该考虑调整数据拆分策略)
另外,SQL Server数据库是事务性的,对于处理数据监测这类事务性要求不太高,容忍一定数据丢失的,可能SQL Server不是最佳选择,确定是放在SQL Server中的话,也应该考虑放在单独的数据库中,并且把数据库的恢复模型设置为Simple
最后,OLAP和OLTP这两个一定发分离,通常我们程序涉及的是OLTP,如果你要涉及大量的数据分析统计,还是使用专门针对这种场景的软件好了(比如可以考虑 SQL Server Analysis Services)
mints 2013-07-24 回答
赞同来自: