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上创build的,每个分区分布在多个驱动器上,我们有8个CPU,数据库中有5亿条logging在2008年1月1日之间均匀分布到2/24/2011(38个分区)。 这个数据也可以分成四个季度或者其他的时间段,但是让我们把假设保持在几个月。

在这种情况下,我相信8个CPU将被利用,只有6个分区将在2010年1月5日至6月20date间被查询。

现在如果我运行以下查询,我的假设与上面相同。

查询2

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

有问题吗?
1.是否会查询所有分区? 是
2.是否将使用全部8个CPU来执行查询? 是
3.性能是否比查询没有被分配的表更好? 是
4.还有什么我失踪?
5.分区索引如何提供帮助?

基于对SQL Server 2008分区表和并行性的有限了解,我回答了上面的第3个问题。 但是,如果我的答案不正确,你能否提供任何我不正确的反馈。

资源:

  • video: 演示SQL Server 2008分区表并行 (5分钟长)
  • MSDN: 分区表和索引

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

BarDev

  1. 可能取决于查询的索引以及索引是如何分区的。
  2. 可能再次取决于查询的索引以及索引是如何分区的。
  3. 可以在表上创build一个非聚集索引,并且该索引可以很快地与State列分区。 如果在另一列上有一个索引,并且包含状态列,那么SQL Server扫描该索引可能更便宜。
  4. 大概。