2

我在很多表中都存储了一个修改日期字段。有时我需要将时间部分用于我的逻辑,有时我只需要日期部分。我想知道以下哪种情况更有效/最佳实践:

  1. 存储两列 - 一列是 DATE 类型,一是 DATETIME 类型 - 它们都代表时间上的相同实例,但其中 DATE 列显然只存储日期部分。当我只需要对日期进行比较时,我使用 DATE 列,而当我需要进行包含时间的比较时,我使用 DATETIME 列。

  2. 存储一列 DATETIME 类型的列,并在需要时使用 CONVERT(DATE, Date_Amended_Col) 检索日期部分。

每次使用 CONVERT 都会有很大的开销吗?我认为 DATE 部分可能是访问频率更高的部分,所以我觉得我会经常使用 CONVERT。

我想不出第二种方法有任何明显的缺点,除了在进行修改时需要更新两个字段而不是只更新一个字段,如果我觉得有必要,我总是可以使用触发器。

或者,还有更好的方法?使用计算列是否与每次使用 CONVERT 相同?

任何想法将不胜感激。

非常感谢,

4

1 回答 1

0

我会推荐一个PERSISTED计算列。请参阅Microsoft的以下定义。

除非另有说明,否则计算列是虚拟列,未物理存储在表中。每次在查询中引用它们时,都会重新计算它们的值。数据库引擎在 CREATE TABLE 和 ALTER TABLE 语句中使用 PERSISTED 关键字将计算列物理存储在表中。当作为其计算一部分的任何列发生更改时,它们的值会更新。通过将计算列标记为 PERSISTED,您可以在计算列上创建确定性但不精确的索引。此外,如果计算列引用 CLR 函数,则数据库引擎无法验证该函数是否真正具有确定性。在这种情况下,计算列必须是 PERSISTED 以便可以在其上创建索引。

于 2012-09-21T11:48:44.110 回答