在 SQL 服务器中,sys.partitions.partition_number = sys.partition_range_values.boundary_id 是否用于相同的 table 和分区?

IN SQL Server, is the sys.partitions.partition_number = sys.partition_range_values.boundary_id for the same table and partition?

SQL服务器中有多个table用于跟踪和控制分区的table。其中两个似乎具有相同含义和值但名称不同的列。

sys.partitions.partition_number 有一个列 partition_numbersys.partition_range_values 有一列 boundary_id

对于给定的分区方案,这些值似乎相同。 FWIW,分区号也由特殊函数 $PARTITION 返回,如

$PARTITION.<partition function>(value)

这似乎也对应于包含匹配值的 sys.partition_range_values table 行中的 boundary_id 列。

来自 Microsoft 文章的 FWIW:

boundary_id int ID (1-based ordinal) of the boundary value tuple, with left-most boundary starting at an ID of 1.

partition_number int Is a 1-based partition number within the owning index or heap. For non-partitioned tables and indexes, the value of this column is 1.

任何人都可以确认这些 table 的两列对于给定的分区函数和方案确实具有相同的值吗?

我想要一个我的搜索技能似乎无法找到的官方参考。

不,不是。

  • sys.partition_range_valuesfunction_id 列上外键到 sys.partition_functions,这在数据库中是唯一的。

  • 您可以通过 sys.partition_schemes 将它与 table 连接起来,它有一个 function_id 列。这还有一个 data_space_id 列,它通过 sys.destination_data_spaces.

    sys.data_spaces 进行多对多映射
  • 据我所知,destination_data_spaces.destination_idsys.partitions.partition_number 相同。

复杂,但如果您使用过分区函数和方案,您将看到它如何映射到它们的使用方式。