SQL Server 2008 分区表和并行性

SQL Server 2008 分区表和并行性

我的公司正在迁移到 SQL Server 2008 R2。我们有一张包含大量存档数据的表。使用此表的大多数查询在 where 语句中使用 DateTime 值。例如:

查询 1

SELECT COUNT(*) 
FROM TableA 
WHERE 
     CreatedDate > '1/5/2010' 
     and CreatedDate < '6/20/2010'  

我假设分区是在 CreatedDate 创建的,每个分区分布在多个驱动器上,我们有 8 个 CPU,数据库中有 5 亿条记录,均匀分布在 2008 年 1 月 1 日至 2011 年 2 月 24 日(38 个分区)的日期范围内。这些数据也可以按季度或其他时间段划分,但我们假设为按月划分。

在这种情况下,我相信将使用 8 个 CPU,并且只会查询 2010 年 1 月 5 日至 2010 年 6 月 20 日之间的日期的 6 个分区。

现在,如果我运行以下查询并且我的假设与上述相同,会怎样?

查询 2

SELECT COUNT(*) 
FROM TableA 
WHERE State = 'Colorado'

有问题吗?
1. 是否会查询所有分区?是
2. 是否会使用所有 8 个 CPU 来执行查询?是
3. 性能是否会比查询未分区的表更好?是
4. 我还遗漏了什么吗?
5. 分区索引有何帮助?

我根据自己对 SQL Server 2008 分区表和并行性的有限了解回答了上述前 3 个问题。但如果我的答案不正确,您能否提供反馈,说明我为什么不正确。

资源:


更新我们在数据库上有一个群集索引,并且在列上有一个覆盖索引

巴德

答案1

  1. 是的
  2. 可能,这取决于查询什么索引以及该索引如何分区。
  3. 可能,这同样取决于查询什么索引以及该索引如何分区。
  4. 可以在表上创建非聚集索引,并且可以根据 State 列对该索引进行分区,这样会非常快。如果另一列上有索引,并且包含 State 列,那么 SQL Server 扫描该索引的成本会更低。
  5. 大概。

相关内容