|
--create database with monthly filegroups
CREATE DATABASE PartitioningDemo
ON(
NAME='Primary',
FILENAME='S:\SolidState\PartitioningDemo.mdf',
SIZE=10MB),
FILEGROUP NewerData (
NAME='PartitioningDemo_NewerData',
FILENAME='S:\SolidState\PartitioningDemo_NewerData.ndf',
SIZE=400MB,
FILEGROWTH=10MB),
FILEGROUP OlderData (
NAME='PartitioningDemo_OlderData',
FILENAME='D:\SpinningDisks\PartitioningDemo_OlderData.ndf',
SIZE=600MB,
FILEGROWTH=10MB)
LOG ON(
NAME='PartitioningDemo_Log',
FILENAME='L:\LogFiles\PartitioningDemo_Log.ldf',
SIZE=10MB,
FILEGROWTH=10MB);
ALTER DATABASE PartitioningDemo
SET RECOVERY SIMPLE;
GO
USE PartitioningDemo;
CREATE PARTITION FUNCTION PF_Last12Months( datetime )
AS RANGE RIGHT
FOR VALUES
( -- older_than_current_minus_12
'20100401' -- current_minus_12
,'20100501' -- current_minus_11
,'20100601' -- current_minus_10
,'20100701' -- current_minus_9
,'20100801' -- current_minus_8
,'20100901' -- current_minus_7
,'20101001' -- current_minus_6
,'20101101' -- current_minus_5
,'20101201' -- current_minus_4
,'20110101' -- current_minus_3
,'20110201' -- current_minus_2
,'20110301' -- current_minus_1
,'20110401' -- current
,'20110501' -- future
);
CREATE PARTITION SCHEME PS_Last12Months
AS PARTITION PF_Last12Months
TO
(
OlderData,
OlderData,
OlderData,
OlderData,
OlderData,
OlderData,
OlderData,
OlderData,
OlderData,
OlderData,
OlderData,
NewerData, -- minus 2 month (to be moved to OlderData)
NewerData, -- minus 1 month
NewerData, -- current month
NewerData -- future month+
);
-- create table with 10,000,000 rows
ALTER DATABASE PartitioningDemo
MODIFY FILEGROUP NewerData DEFAULT;
WITH
t1 AS (SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2
UNION ALL SELECT 3 UNION ALL SELECT 4
UNION ALL SELECT 5 UNION ALL SELECT 6
UNION ALL SELECT 7 UNION ALL SELECT 8
UNION ALL SELECT 9),
t2 AS (SELECT a.n
FROM t1 a, t1 b, t1 c, t1 d, t1 e, t1 f, t1 g)
SELECT
ISNULL(
DATEADD(
day
, (ROW_NUMBER() OVER(ORDER BY t2.n))/26385, '20100401')
, '20100401') AS PartitioningDateTimeColumn
,ISNULL((ROW_NUMBER() OVER(ORDER BY t2.n)), 0) AS Column1
INTO dbo.PartitionMoveDemo
FROM t2;
-- create indexes partitioned indexes on table
CREATE CLUSTERED INDEX cdx_PartitionMoveDemo_PartitioningColumn
ON dbo.PartitionMoveDemo(PartitioningDateTimeColumn)
ON PS_Last12Months(PartitioningDateTimeColumn);
CREATE NONCLUSTERED INDEX idx_PartitionMoveDemo_Column1
ON dbo.PartitionMoveDemo(Column1)
ON PS_Last12Months(PartitioningDateTimeColumn);
GO
|