$ PARTITION的好处?

时间:2012-07-08 11:51:21

标签: sql database sql-server-2008

我不清楚在SQL Server中使用$PARTITION的目的是什么?我已经阅读了MSDN中的内容,但仍然不理解。

您可以使用它有什么好处?

2 个答案:

答案 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.partitionssys.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可能会存储在其他地方。