我不清楚$PARTITION
在 SQL Server 中使用的目的?我已经阅读了 MSDN 的内容,但仍然不明白。
你可以使用它有什么好处?
我不清楚$PARTITION
在 SQL Server 中使用的目的?我已经阅读了 MSDN 的内容,但仍然不明白。
你可以使用它有什么好处?
您可以使用此函数来确定将用于某个值的分区号。例如,对于按日期分区的表,这将告诉您哪个分区将用于 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
or做更简单的事情sys.dm_db_partition_stats
。
(这两个例子都取自Itzik 的 SQL Mag 文章。)
对数据库中的表进行分区意味着将其拆分为多个部分,同时仍将其视为单个表。我们在这里讨论的是水平分区,这意味着每个分区包含所有列,但只包含一些行。为此,您必须定义一个分区函数,该函数根据分区列中该行的值定义该行所属的分区。$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 可能存储在其他地方。