SQLServer 2005 海量數據解決方案(分區表)與對已存在的表進行分區

這兩天一直在研究2005 中如何對錶進行分區,但是參考了多數資料都是說新建表後再將原表中數據插入到新表中,這樣有些不方便.

    最後找到了在已有表上做分區表的方法.見代碼.

    我們有個表現在已經到了1千萬的數據,之前僅僅是優化索引和索引試圖來在真實的環境中查看到底sql2005單表能負載多大的量。
     最後得出結論,在我們公司現有的硬件條件下,sql2005中,單表的量最多不能超過250w數據。(這個數據會根據硬件的不同而會有所不同.)

---select * from t200705

--1.先根據表數據的量大小,來拆分每一個分區,保證每一個分區表的記錄儘量在250w條記錄左右.

--分區函數

 

CREATE PARTITION FUNCTION MonthDateRange(datetime)
 AS RANGE LEFT FOR VALUES
(
'20070131 23:59:59.997',
'20070531 23:59:59.997',
'20071231 23:59:59.997'
)

--2然後我們需要添加相應的文件組 .我使用的是主文件組.
ALTER DATABASE T1 ADD FILEGROUP [PRIMARY]
ALTER DATABASE T1 ADD FILEGROUP [PRIMARY]
ALTER DATABASE T1 ADD FILEGROUP [PRIMARY]

--3.我們需要在服務器上建立出單獨的文件(涉及到的朋友可能知道,我們如果把文件分佈在不同的磁盤上,可以最大限度的提高磁頭的讀寫能力;另:這裏微軟建議數據庫服務器最好--作Raid0 + Raid1).我由於是做測試,所以就放在了一個硬盤上了.

 

ALTER DATABASE T1
ADD FILE
(NAME = N'View200701',FILENAME = N'D:"View200701.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB)
TO FILEGROUP [PRIMARY]

ALTER DATABASE T1
ADD FILE
(NAME = N'View200702',FILENAME = N'D:"View200702.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB)
TO FILEGROUP [PRIMARY]

ALTER DATABASE T1
ADD FILE
(NAME = N'View200703',FILENAME = N'D:"View200703.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB)
TO FILEGROUP [PRIMARY]

--4.創建關聯

--分區架構

 

CREATE PARTITION SCHEME MonthDateRangeScheme
AS
PARTITION MonthDateRange
ALL TO ([PRIMARY])

---5.創建表和索引(我這裏只列出如何創建表)
---
/*5.
CREATE TABLE 表
{

}
ON MonthDateRangeScheme (日期列)
GO
*/
--6. --對已經存在的表進行分區設置

--切換到分區表
ALTER TABLE t200705
ADD
PRIMARY KEY NONCLUSTERED(rownumber,starttime)
ON MonthDateRangeScheme(starttime)
GO

/*
-- 切換到分區表

ALTER TABLE dbo.t200705
DROP CONSTRAINT rownumber,starttime
WITH(
MOVE
TO PS_MonthDateRangeScheme(starttime)
)

*/

---如果大家希望查詢此表中的相關數據,可以使用如下語句

SELECT *, $PARTITION.MonthDateRange(starttime) AS T2007 FROM t200705
where starttime>'20070603'


---7刪除

-- 刪除測試
--DROP TABLE dbo.t200705
--DROP PARTITION SCHEME MonthDateRangeScheme
---DROP PARTITION FUNCTION MonthDateRange

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章