情况如下。有一个表,每月约有 40 000 000 行乘以 24 个月,所以可以说几乎有 1 000 000 000 行。每行都有一个时间戳列,其中在该列上创建了索引。 最频繁的查询是一次聚合特定月份的数据——例如 2016 年 1 月。如果我们为每个月分配一个单独的标识符,我们称之为“idm”,对于 2016 年 1 月,使其等于 1(2016 年 2 月 = 2 等等on), create index on idm, would have any effect on query performance comparing WHERE statements:
- 时间戳 >= '20160101' AND 时间戳 < '20160201'
- idm = 1 ? 使用 idm 会更快吗?
最佳答案
如果您在 timestamp
和提议的 idm
列上有一个索引,那么两者可能是相同的。这是一个大概的答案。如果 where
子句中有其他条件,则 idm = 1
性能更好。它允许使用更多优化方法。
但是,索引并不是正确的方法。由于数据和查询的性质,您应该考虑表分区。这将允许单独存储每个月的数据。您可以阅读有关表分区的信息 here .
如果您不想对表进行分区,我建议将 idm
或 timestamp
设为聚簇索引。这将有助于查询,即使是 where 子句选择了表中相对较高比例的行。
关于sql - 添加带有月份标识符的列可以提高查询性能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38142642/