我公司正朝着到SQL Server 2008 R2。我们有一个包含大量存档数据的表格。大多数使用此表的查询在where语句中使用DateTime值。例如:SQL Server 2008中分区表和并行
查询1
SELECT COUNT(*)
FROM TableA
WHERE
CreatedDate > '1/5/2010'
and CreatedDate < '6/20/2010'
我做的是分区上创建CreatedDate和每个分区跨多个驱动器摊开的假设,我们有8个CPU,并且还有500万条记录中数据库在2008年1月1日至2011年2月24日期间均匀分布(38个分区)。这些数据也可以分成一年的四分之一或其他时间段,但让我们将假设保持数月。
在这种情况下,我会认为,8 CPU的会被利用,只有6个分区将被用于查询2010年1月5日和2010年6月20日之间的日期。
如果现在我跑下面的查询和我的假设与上面相同。
查询2
SELECT COUNT(*)
FROM TableA
WHERE State = 'Colorado'
问题?
1.是否会查询所有分区?是
2.是否将使用所有8个CPU来执行查询?是
3.将性能比查询未partitoned表更好吗?是
4.有什么我失踪?
5.分区索引如何提供帮助?
我回答了上面的第3个问题,根据我对SQL Server 2008分区表的了解有限知识&并行性。但是,如果我的答案不正确,你能否提供任何我错误的反馈。
资源:
- 视频:Demo SQL Server 2008 Partitioned Table Parallelism(5分钟长)
- MSDN:Partitioned Tables and Indexes
- MSDN:Designing Partitions to Manage Subsets of Data
- MSDN:Query Processing Enhancements on Partitioned Tables and Indexes
- MSDN:Word文档:Partitioned Table and Index Strategies Using SQL Server 2008白纸
BarDev
似乎像DBA这样的问题会更适合在Serverfault(或者我们现在有一个DBA站点?)......但我不确定。 – derobert 2011-02-24 19:32:29
我会出去Serverfault并找出答案。 – 2011-02-24 22:05:10
根据回复,我们的表格确实具有Clusterd Index和其他列上的其他索引,例如State。我努力让帖子尽可能小,而不用考虑服务器,数据库和表格配置的每个细节。也许我应该也已经确定了这些假设。假设服务器,数据库和对象对象遵循Microsoft的最佳实践。 – 2011-02-24 22:17:48