我不清楚在SQL server中使用$PARTITION
的目的嗎?我已經閱讀了MSDN的內容,但仍不明白。
你可以使用它有什麼好處?
我不清楚在SQL server中使用$PARTITION
的目的嗎?我已經閱讀了MSDN的內容,但仍不明白。
你可以使用它有什麼好處?
分區表中的一個數據庫意味着它分割成多片,同時仍像一個單一的表對其進行處理。我們在這裏討論關於水平分區的問題,這意味着每個分區都包含所有列但只包含一些行。爲此,您必須定義一個分區函數,該函數根據分區列中該行的值來定義行所屬的分區。 $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可能存儲在其他地方。
您可以使用此功能來確定將用於特定值的分區號。例如,按日期分區表,這會告訴你哪些分區將被用於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.partitions
或sys.dm_db_partition_stats
簡單得多。
(這兩個例子都從Itzik's SQL Mag article here獲得。)
你在問關於分區表(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