我不清楚在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