2012-07-08 61 views
0

我不清楚在SQL server中使用$PARTITION的目的嗎?我已經閱讀了MSDN的內容,但仍不明白。

你可以使用它有什麼好處?

+0

你在問關於分區表(http://msdn.microsoft.com/en-us/library/ms188071.aspx)的'$ PARTITION'函數是否正確?您不是在詢問有關分區結果集的Transact-SQL中的「PARTITION BY」子句(http://msdn.microsoft.com/zh-cn/library/ms176102),對不對? – 2012-07-08 12:18:49

回答

0

分區表中的一個數據庫意味着它分割成多片,同時仍像一個單一的表對其進行處理。我們在這裏討論關於水平分區的問題,這意味着每個分區都包含所有列但只包含一些行。爲此,您必須定義一個分區函數,該函數根據分區列中該行的值來定義行所屬的分區。 $PARTITION告訴你一行屬於哪個分區。

比方說,我們有一個整數列表示我們行的評分,我們預計用戶通常只會詢問評分高於4的項目。我們可以根據評分進行劃分。我們的分區功能可以是:

CREATE PARTITION FUNCTION partitionByRating (int) FOR VALUES (4); 

然後,找出哪個分區我們的表中的行屬於,我們可以查詢:

SELECT $partition.partitionByRating(i.Rating) AS [Partition Number], 
    rating AS [Rating], 
    name AS [Item Name] 
FROM dbo.Items AS i 

而且我們會獲得類似的結果:

Partition Rating Item Name 
1   1   Ball 
1   4   Scooter 
2   5   Blaster 

這意味着Ball和Scooter將被存儲在一起,但取決於如何將分區分配給存儲,Blaster可能存儲在其他地方。

0

您可以使用此功能來確定將用於特定值的分區號。例如,按日期分區表,這會告訴你哪些分區將被用於2001年7月1日,你該值插入表中,甚至前:

SELECT $PARTITION.PF_RangeByYear('20010701') 

你也可以用它來找到行計數在每一個分區號:

SELECT $partition.PF_RangeByYear(orderdate) AS partition#, 
    COUNT(*) AS cnt 
FROM Orders 
GROUP BY $partition.PF_RangeByYear(orderdate); 

這可以說是你可以做的sys.partitionssys.dm_db_partition_stats簡單得多。

(這兩個例子都從Itzik's SQL Mag article here獲得。)