0

背景

  • 微软 SQL Server 2008 R2
  • 每天有约 10 万条记录的表
  • 大多数查询此表的查询按所述列过滤

问题

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

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

问题

  1. 你认为这是个好主意吗?
  2. 你会通过这样做获得任何改进吗?
  3. 有什么可能的缺点吗?

我们仍处于设计阶段,因此如果我们愿意,我们仍有时间进行更改。

我们希望有很多查询通过此列进行过滤,但是 IMO 这不会带来任何性能改进,如果有一个 Date 列而不指定其中的时间也是一样的。

4

1 回答 1

1

如果您试图提高表的性能,那么添加一个额外的列是一种可疑的开始方式。

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

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

In fact, if the querying is all on recent data, then I might suggest that you create a history table, which can be queried at leasure. Then keep the most recent data in "current" table. You can have a process that runs every day to remove the oldest day of data from the current data and to put the rows in the history table.

In any case, as the comments suggest, the format ddMmyyyy is an unreasonable format. It works for equality, but not for between or order by.

于 2012-11-12T19:10:27.100 回答