我不清楚在SQL Server中使用$PARTITION
的目的是什么?我已经阅读了MSDN中的内容,但仍然不理解。
您可以使用它有什么好处?
答案 0 :(得分: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.partitions
或sys.dm_db_partition_stats
开始,你可以做得更简单。
(这两个例子均来自Itzik's SQL Mag article here。)
答案 1 :(得分: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可能会存储在其他地方。