如何创建一个包含大量数据的表来支持仓库中的快速查询?

时间:2013-08-04 04:44:02

标签: sql-server sql-server-2008 reporting-services dynamic-sql

我有大量5M左右的数据存储在一个非常平坦的表中,该表有12列。此表包含聚合数据,与其他表没有任何关系。我想对此数据运行动态查询以进行报告。该表包含DistrictCityYearCategorySubCategorySaleAmount等字段

  1. 我想查看2010年和2013年之间的销售报告。

  2. 各年度各产品的销售情况并进行比较。

  3. 特定销售人员在一年内的销售。

  4. 按类别,子类别等进行销售

  5. 我正在使用SQL Server 2008,但我不是DBA因此我不知道应该创建什么类型的索引?我应该索引哪些列以使我的查询有效。

    如果数据量很小,我就不会对所有这些问题感到困扰,只是继续进行,但知道要编制哪些列以及要创建哪种类型的索引在这种情况下至关重要。

    请告诉我确保快速执行查询的最佳方法。

    如果我在所有列上创建聚簇索引,它会起作用吗?或者它会伤害我。

    请注意,此表格不会每月更新一次。

1 个答案:

答案 0 :(得分:0)

鉴于您非常明确且具体的要求,我建议您为每个字段创建一个非聚集索引,并将其作为第一步留给优化器。 (即您创建12个索引)在每个索引中只放置一个字段。不要索引(或至少使用警告)任何长文本类型字段。也不要索引像M / F那样只有2个值和50/50分割的字段。我假设你在每个字段都有谓词,但不要打扰任何从未用于选择目的的字段索引。

如果此后仍有问题,请在sql server中找到查询分析器,并使用它来指导查询的处理方式。

多分段索引有时会更好,但如果您的查询主要限制在表的一小部分,则单个字段索引就可以了。

对于使用“order by”的查询,您可能会遇到剩余的性能问题,但我们可以在此阶段将其作为预备。

我的推理基于

  1. 你只有12列,所以我们不会超载
  2. 只有5M行。这对于s​​ql / server来说非常容易处理
  3. 数据的增长很小,因此索引更新不应该是一个太大的问题。
  4. 优化器会喜欢这些与索引相结合的查询。
  5. 我们没有典型的查询示例来指定多段索引,这个问题似乎意味着高度可变的查询。