sqlserver2005表分區
『壹』 怎樣使用創建好的sql SERVER 2005表分區
http://msdn2.microsoft.com/zh-cn/library/ms130214.aspx
這是sqlserver2005聯機叢書。。可以看一下。。。。。
『貳』 sql server 2005表分區
多大的資料庫還分區?在實際應用中,除了超大型資料庫以外,都不需要表分區。
企業版支持表分區,但是還是建議你先了解自己的目的,而不是重裝資料庫。
『叄』 SQL 2005 如何按月把表分區
創建分區函數
按月區分的例子 (目前只有前3季度)
CREATE PARTITION FUNCTION sale_date_part_func(DATETIME)
AS RANGE RIGHT FOR VALUES(
CONVERT(DATETIME, '2010-01-01 00:00:00', 120),
CONVERT(DATETIME, '2010-02-01 00:00:00', 120),
CONVERT(DATETIME, '2010-03-01 00:00:00', 120),
CONVERT(DATETIME, '2010-04-01 00:00:00', 120),
CONVERT(DATETIME, '2010-05-01 00:00:00', 120),
CONVERT(DATETIME, '2010-06-01 00:00:00', 120),
CONVERT(DATETIME, '2010-07-01 00:00:00', 120),
CONVERT(DATETIME, '2010-08-01 00:00:00', 120),
CONVERT(DATETIME, '2010-09-01 00:00:00', 120)
);
go
創建分區架構(Schema)
CREATE PARTITION SCHEME sale_date_part_sche
AS PARTITION sale_date_part_func
TO (
[PRIMARY], [PRIMARY], [PRIMARY],
[PRIMARY], [PRIMARY], [PRIMARY],
[PRIMARY], [PRIMARY], [PRIMARY],
[PRIMARY]
);
go
創建分區表
CREATE TABLE sale_data (
sale_date DATETIME NOT NULL ,
sale_item VARCHAR(2) NOT NULL ,
sale_money DECIMAL(10,2) NOT NULL
) ON sale_date_part_sche(sale_date);
go
『肆』 Sql server 2005 如果一個資料庫中的一個表需要分開存放,除了用分區還可以怎麼解決
分區是微軟推薦的方式,但是只在企業版中提供。
否則,只能手動模擬分區,把查詢,更新等操作都放到存儲過程函數中。做起來特別麻煩。
『伍』 sql 2005中如何把一張表分成多個表
1、用分區表
2、模擬分區表,先建好多個表,再通過一個視圖+約束,模擬出一個表。
3、隨心所欲,select * into table_name from source_table_name where conditions;
『陸』 sql server 2005表分區
前提是你的表上有聚焦索引(一般主鍵默認就是聚焦索引) 而且改的時候要把普通索引刪除掉(因為改是通過刪除聚焦索引實現數據切換的, 所以不刪除普通索引會導致普通索引被重建, 而切換到分區表再建立聚焦索引的時候又會導致普通索引重建一次, 所以刪除普通索引再重建可以避免兩次重建普通索引) USE tempdb GO -- 測試表 CREATE TABLE dbo.tb( id int, CONSTRAINT PK_id PRIMARY KEY CLUSTERED( id) ) INSERT dbo.tb SELECT 1 UNION ALL SELECT 10 GO -- 切換為分區表 -- 分區函數 CREATE PARTITION FUNCTION PF_test(int) AS RANGE LEFT FOR VALUES(5) -- 分區架構 CREATE PARTITION SCHEME PS_test AS PARTITION PF_test ALL TO( [PRIMARY]) -- 切換到分區表 ALTER TABLE dbo.tb DROP CONSTRAINT PK_id WITH( MOVE TO PS_test(id))
『柒』 求教 SQL Server 2005分區方案
數據量那麼大,肯定得分區。根據你的情況,按訂單創建時間分區是最好的選擇。歷史數據一次性按年分區也沒所謂,後續的數據,按月分區(如果雙11這些月,數據較大可以再細分),隨著時間的推移,你需要不斷的創建新的分區。
檢查你的存儲過程,我估計演算法性能不高,你看看是不是用了游標。
錯開後台服務運行時間,避免同一時間多個JOB或服務執行運算。
分析是否能增加有益的索引
另外SQL2008在分區上性能有更好的發揮。
『捌』 如何對一個已經存在的SQL Server表分區
有兩種方法可以實現對一個表分區.一是創建一個新的標識為分區表的表(你可參照此步驟),然後把數據復制到這張新表,再對這兩張表分別改名.或者,像我寫在下面的,通過重建或創建一個聚集索引來達到分區一個表.
一個SQL Server表和數據進行分區示例
--Table/Index creation
CREATE TABLE [dbo].[TABLE1]
([pkcol] [int] NOT NULL,
[datacol1] [int] NULL,
[datacol2] [int] NULL,
[datacol3] [varchar](50) NULL,
[partitioncol] datetime)
GO
ALTER TABLE dbo.TABLE1 ADD CONSTRAINT PK_TABLE1 PRIMARY KEY CLUSTERED (pkcol)
GO
CREATE NONCLUSTERED INDEX IX_TABLE1_col2col3 ON dbo.TABLE1 (datacol1,datacol2)
WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY]
GO
-- Populate table data
DECLARE @val INT
SELECT @val=1
WHILE @val < 1000
BEGIN
INSERT INTO dbo.Table1(pkcol, datacol1, datacol2, datacol3, partitioncol)
VALUES (@val,@val,@val,'TEST',getdate()-@val)
SELECT @val=@val+1
END
GO
通過查看sys.partitions系統視圖,上面的代碼創建了一個傳統的單分區表.
SELECT o.name objectname,i.name indexname, partition_id, partition_number, [rows]
FROM sys.partitions p
INNER JOIN sys.objects o ON o.object_id=p.object_id
INNER JOIN sys.indexes i ON i.object_id=p.object_id and p.index_id=i.index_id
WHERE o.name LIKE '%TABLE1%'
objectname
indexname
partition_id
partition_number
rows
TABLE1 PK_TABLE1 72057594042712064 1 999
TABLE1 IX_TABLE1_col2col3 72057594042777600 1 999
創建已分區的SQL Server表
為了創建一個分區表,需要先創建一個分區函數和分區方案. 下面的示例中,將通過datatime欄位對一個表分區. 這里是創建這些對象與在系統視圖中查看這些元數據的代碼.
CREATE PARTITION FUNCTION myDateRangePF (datetime)
AS RANGE RIGHT FOR VALUES ('20110101', '20120101','20130101')
GO
CREATE PARTITION SCHEME myPartitionScheme
AS PARTITION myDateRangePF ALL TO ([PRIMARY])
GO
SELECT ps.name,pf.name,boundary_id,value
FROM sys.partition_schemes ps
INNER JOIN sys.partition_functions pf ON pf.function_id=ps.function_id
INNER JOIN sys.partition_range_values prf ON pf.function_id=prf.function_id
現在我們有一個分區方案,可對表進行分區操作. 既然我們想通過聚集索引來對一個創建了聚集索引的表進行分區,我們需要先刪除掉這個索引並通過一個非聚集索引重建這個約束. 若這張表沒有聚集索引,我們可忽略這一步,直接執行創建聚集索引語句. 類似地,若有一個聚集索引創建在分區欄位上,我們可執行帶DROP_EXISTING的創建聚集索引語句. 最後,若關注於執行此任務時資料庫停止服務時間並且你使用的是SQL Server企業版本,可通過創建索引的ONLINE=ON選項來使資料庫的停止服務時間最小. 記住,在使用ONLINE選項重建索引時,你可能會看到一些性能降低的現象. 這里是一些可能會乃至的腳本.
ALTER TABLE dbo.TABLE1 DROP CONSTRAINT PK_TABLE1
GO
ALTER TABLE dbo.TABLE1 ADD CONSTRAINT PK_TABLE1 PRIMARY KEY NONCLUSTERED (pkcol)
WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
CREATE CLUSTERED INDEX IX_TABLE1_partitioncol ON dbo.TABLE1 (partitioncol)
WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
ON myPartitionScheme(partitioncol)
GO
在這些語句結束後,我們可再次查看sys.partitions系統視圖(看上面的代碼)並確認我們的表有4個分區.
objectname
indexname
partition_id
partition_number
rows
TABLE1 IX_TABLE1_partitioncol 72057594043039744 1 233
TABLE1 IX_TABLE1_partitioncol 72057594043105280 2 365
TABLE1 IX_TABLE1_partitioncol 72057594043170816 3 366
TABLE1 IX_TABLE1_partitioncol 72057594043236352 4 35
TABLE1 IX_TABLE1_col2col3 72057594043301888 1 999
TABLE1 PK_TABLE1 72057594043367424 1 999
SQL Server表和數據示例清除
--cleanup
DROP TABLE TABLE1
DROP PARTITION SCHEME myPartitionScheme
DROP PARTITION FUNCTION myDateRangePF