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

时间:2016-11-09 18:31:22

标签: sql-server smalldatetime

使用SQL Server 2014:

我正在使用一些大型日志表,其中一列是CreateDate数据类型DateTime

有一些基于CreateDate列的索引。所有表都已包含大量行数。

问题#1 :有没有什么理由不将所有CreateDate列转换为SMALLDATETIME类型?

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

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

2 个答案:

答案 0 :(得分:1)

是的,您可以为您的案例使用小日期时间数据类型。

处理smalldatetime时的警告

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

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

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

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

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

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

我希望这些信息对您有帮助。

答案 1 :(得分:0)

老实说,我认为,如果没有破坏,请不要改变它。至少,如果没有全面的调查和计划,请不要改变它。原因如下:

  1. 可能存在基于您不了解的数据类型的依赖项。如果这是一个成熟的产品,即它在最近几个月内没有创建,那么你可能不知道如果你改变数据类型就会破坏那些可能会破坏的列或列。

    < / LI>
  2. 精确度可能对某个人很重要。

  3. 保存数据。是的,SmallDateTime是half DateTime的size,但是根据您拥有的记录数量和表的大小,这对您来说可能不是那么大的问题。是的,较小的数据大小可能会使事情变得更快。