0

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

  1. 我想查看报表,例如 2010 年到 2013 年之间的销售额。

  2. 每种产品在不同年份的销售额并进行比较。

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

  4. 按类别、子类别等进行的销售

我使用的是 SQL Server 2008,但我不是 DBA,因此我不知道应该创建什么类型的索引?我应该索引哪些列才能使我的查询正常工作。

如果数据量很小,我就不会为所有这些问题而烦恼,而是继续进行,但在这种情况下,知道要索引哪些列以及要创建哪种类型的索引至关重要。

请让我知道确保快速执行查询的最佳方法。

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

请记住,此表可能不会每月更新一次。

4

1 回答 1

0

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

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

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

对于使用“order by”的查询,您可能会遇到剩余的性能问题,但在这个阶段让我们把它作为一个提示。

我的推理是基于

  1. 你只有 12 列,所以我们不会超载任何东西
  2. 只有 5M 行。这对 sql/server 来说很容易处理
  3. 数据的增长很小,因此索引更新不应该成为太大的问题。
  4. 优化器会喜欢这些结合索引的查询。
  5. 我们没有典型的查询示例来指定多段索引,而且这个问题似乎暗示了高度可变的查询。
于 2013-08-04T09:27:08.087 回答