[转载] SQL SERVER – 2005 – Database Table Partitioning Tutorial – How to Horizontal Partition Database...

surce article: http://blog.sqlauthority.com/2008/01/25/sql-server-2005-database-table-partitioning-tutorial-how-to-horizontal-partition-database-table/

 have received call from my DBA friend who read my article SQL SERVER – 2005 – Introduction to Partitioning. He suggested that I should write simple tutorial about how to horizontal partition database table. Here is simple tutorial which explains how a table can be partitioned. Please read my article Introduction to Partitioning before continuing to this article.

Step 1 : Create New Test Database with two different filegroups
I have written tutorial using my C: Drive, however to take advantage of partition it is recommended that different file groups are created on separate hard disk to get maximum performance advantage of partitioning. Before running following script, make sure C: drive contains two folders – Primary and Secondary as following example has used those two folder to store different filegroups.
USEMaster;
GO
--- Step 1 : Create New Test Database with two different filegroups.
IFEXISTS (
SELECTname
FROMsys.databases
WHEREname=N'TestDB')
DROP DATABASETestDB;
GO
CREATE DATABASETestDB
ON PRIMARY
(NAME='TestDB_Part1',
FILENAME=
'C:\Data\Primary\TestDB_Part1.mdf',
SIZE=2,
MAXSIZE=100,
FILEGROWTH=1),
FILEGROUP TestDB_Part2
(NAME='TestDB_Part2',
FILENAME=
'C:\Data\Secondary\TestDB_Part2.ndf',
SIZE=2,
MAXSIZE=100,
FILEGROWTH=1);
GO


Step 2 : Create Partition Range Function
Partition Function defines the range of values to be stored on different partition. For our example let us assume that first 10 records are stored in one filegroup and rest are stored in different filegroup. Following function will create partition function with range specified.
USETestDB;
GO
--- Step 2 : Create Partition Range Function
CREATEPARTITIONFUNCTIONTestDB_PartitionRange(INT)
ASRANGELEFT FOR
VALUES
(10);
GO

Click on image to see larger image
Step 3 : Attach Partition Scheme to FileGroups
Partition function has to be attached with filegroups to be used in table partitioning. In following example partition is created on primary and secondary filegroup.
USETestDB;
GO
--- Step 3 : Attach Partition Scheme to FileGroups
CREATEPARTITION SCHEME TestDB_PartitionScheme
ASPARTITION TestDB_PartitionRange
TO([PRIMARY],TestDB_Part2);
GO

Step 4 : Create Table with Partition Key and Partition Scheme
The table which is to be partitioned has to be created specifying column name to be used with partition scheme to partition tables in different filegroups. Following example demonstrates ID column as the Partition Key.
USETestDB;
GO
--- Step 4 : Create Table with Partition Key and Partition Scheme
CREATE TABLETestTable
(IDINTNOT NULL,
Date DATETIME)
ONTestDB_PartitionScheme(ID);
GO

Step 5 : (Optional/Recommended) Create Index on Partitioned Table
This step is optional but highly recommended. Following example demonstrates the creation of table aligned index. Here index is created using same Partition Scheme and Partition Key as Partitioned Table.
USETestDB;
GO
--- Step 5 : (Optional/Recommended) Create Index on Partitioned Table
CREATE UNIQUE CLUSTERED INDEXIX_TestTable
ONTestTable(ID)
ONTestDB_PartitionScheme(ID);
GO

Step 6 : Insert Data in Partitioned Table
Insert data in the partition table. Here we are inserting total of 3 records. We have decided that in table partition 1 Partition Key ID will contain records from 1 to 10 and partition 2 will contain reset of the records. In following example record with ID equals to 1 will be inserted in partition 1 and rest will be inserted in partition 2.
USETestDB;
GO
--- Step 6 : Insert Data in Partitioned Table
INSERT INTOTestTable(ID,Date)-- Inserted in Partition 1
VALUES(1,GETDATE());
INSERT INTOTestTable(ID,Date)-- Inserted in Partition 2
VALUES(11,GETDATE());
INSERT INTOTestTable(ID,Date)-- Inserted in Partition 2
VALUES(12,GETDATE());
GO

Step 7 : Test Data from TestTable
Query TestTable and see the values inserted in TestTable.
USETestDB;
GO
--- Step 7 : Test Data from TestTable
SELECT*
FROMTestTable;
GO

Step 8 : Verify Rows Inserted in Partitions
We can query sys.partitions view and verify that TestTable contains two partitions and as per Step 6 one record is inserted in partition 1 and two records are inserted in partition 2.
USETestDB;
GO
--- Step 8 : Verify Rows Inserted in Partitions
SELECT*
FROMsys.partitions
WHEREOBJECT_NAME(OBJECT_ID)='TestTable';
GO


Partitioning table is very simple and very efficient when used with different filegroups in different tables. I will write very soon more articles about Table Partitioning. If you need any help in table partitioning or have any doubt, please contact me and I will do my best to help you.

转载于:https://www.cnblogs.com/zhujingyuan/archive/2009/09/30/1576702.html