Int列上的索引在Date列上

时间:2012-11-12 17:34:50

标签: sql sql-server performance sql-server-2008

背景

  • Microsoft SQL Server 2008 R2
  • 每日记录约100k的表
  • 大多数查询都按照规定的列
  • 查询此表格过滤器

问题

因此,要为数据库添加一点性能改进,一个选项是在日期列上添加索引,但不是将日期存储为 date 类型,而是存储它使用以下格式作为 integer

ddMMyyyy
**Edit: Changed the format to yyyyMMdd after looking at comments**

问题

  1. 你认为这是个好主意吗?
  2. 这样做会有什么改进吗?
  3. 任何可能的缺点?
  4. 我们仍然处于设计阶段,所以如果我们愿意,我们仍有时间改变它。

    我们希望有很多查询可以通过此列进行过滤,但IMO不会提供任何性能改进,如果没有在其中指定时间,则使用Date列也是一样。

1 个答案:

答案 0 :(得分:1)

如果您正在尝试提高桌面的效果,那么添加额外的列是一种可疑的开始方式。

首先,如果表已有日期列,则使用该列。日期是4个字节,因此它与整数的大小相同。更重要的是,它为您提供了数据库中内置的各种日期功能 - 获取月份名称,按日期排序,计算日期之间的天数等等。

构建索引是提高性能的一种方法。我还建议你考虑分区表。你可能不需要白天分解表,但按月拆分它会产生合理大小的分区(大约300万行)。

事实上,如果查询全部是最近的数据,那么我可能会建议你创建一个历史表,可以在leasure中查询。然后将最新数据保存在“当前”表中。您可以拥有一个每天运行的进程,以从当前数据中删除最早的数据,并将这些行放在历史记录表中。

无论如何,正如评论所示,格式ddMmyyyy是一种不合理的格式。它适用于平等,但不适用于betweenorder by