当我不需要存储秒数时,有什么理由不使用 SMALLDATETIME 吗?

Any good reason not using SMALLDATETIME when I don't need to store seconds?

使用 SQL 服务器 2014:

我正在处理一些大型日志 table,其中一列是 CreateDate,数据类型为 DateTime

有一些索引基于 CreateDate 列。所有 table 已包含大量行。

问题 #1:是否有充分的理由不将所有 CreateDate 列转换为 SMALLDATETIME 类型?

问题 #2:是否有安全的 alter table table 语句将现有的 DATETIME 数据转换为 SMALLDATETIME没有任何错误?

问题 #3:当我使用 ALTER TABLE 时,基于 CreateDate 的现有索引会发生什么情况?

是的,您可以针对您的情况使用小日期时间数据类型。

处理smalldatetime时的警告

Smalldatetime 每次都是 0 秒,没有毫秒。但请注意,小日期时间会将分钟值舍入到最接近的分钟值。

例如,如果您的日期时间列包含类似“2016-08-06 11:49:31.667”的值。那么小日期时间值将为“2016-08-06 11:50”。它已将日期时间四舍五入到最接近的值第 50 分钟,实际上是第 49 分钟。

我认为最好的修改数据的方式

我的建议是再创建一个数据类型为 smalldatetime 的列。并通过将您的日期时间列转换为 smalldatetime 来更新它。并删除您的日期时间列。

更改数据类型时的索引器部分

来到索引器。您可以在此列上创建相同的索引器。据我所知,在 Smalldatetime 上安装 Indexer 比在 datetime 上安装它要好。因为 datetime 值在每列的最大值中以毫秒为单位不同。

希望以上信息对您有所帮助。

老实说,如果它没有坏,就不要改变它。至少,不要在没有全面调查和计划的情况下更改它。原因如下:

  1. 可能存在基于您不知道的数据类型的依赖关系。如果这是一个成熟的产品,即它不是在过去几个月内创建的,那么您可能不知道命中该列的所有内容或如果您更改数据类型可能会破坏的列。

  2. 精度对某个地方的人来说可能很重要。

  3. 数据已保存。是的,SmallDateTime 是 DateTime 的 half the size,但取决于您有多少条记录以及 table 有多大,这对您来说可能不是什么大问题。是的,较小的数据大小可能会使事情变得更快。