添加带月标识符的列可以提高查询性能吗?

时间:2016-07-01 10:07:09

标签: sql sql-server

情况如下。有一张桌子,每月约有40 000 000行,24个月,所以我们说几乎有1亿行。每行都有一个时间戳列,并在此列上创建索引。 最常见的查询是特定月份的汇总数据 - 例如2016年1月。如果我们为每个月分配一个separete标识符,我们可以将其称为" idm"并且对于2016年1月使它等于1(2016年2月= 2等),在idm上创建索引,它会对查询性能比较WHERE语句有任何影响:

  1. 时间戳> =' 20160101' AND时间戳< ' 20160201'
  2. idm = 1 ? 使用idm会更快吗?

1 个答案:

答案 0 :(得分:2)

如果您在timestamp和建议的idm列上有索引,则两者可能完全相同。这是一个近似的答案。如果where子句中有其他条件,那么idm = 1的性能会更好。它允许更多使用优化的方法。

但是,索引不是正确的方法。由于数据和查询的性质,您应该考虑表分区。这将允许每个月的数据分开存储。您可以阅读有关表格分区here的信息。

如果您不想对表进行分区,我建议将idmtimestamp作为聚簇索引。这将有助于查询,甚至where子句在表中选择相对较高比例的行。