0

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

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

4

2 回答 2

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.partitionsor做更简单的事情sys.dm_db_partition_stats

(这两个例子都取自Itzik 的 SQL Mag 文章。)

于 2012-07-08T12:46:38.403 回答
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 可能存储在其他地方。

于 2012-07-08T12:46:47.497 回答