我的公司正在转向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个问题。 但是,如果我的答案不正确,你能否提供任何我不正确的反馈。
资源:
更新我们在数据库上有一个集群索引,并覆盖了列上的索引
BarDev