2016-11-09 79 views
0

使用SQL Server 2014:当我不需要存储秒时,不使用SMALLDATETIME的任何好理由?

我与几个大的日志表工作和他们的一列是数据类型DateTimeCreateDate

有几个索引基于CreateDate列。所有表格已经包含大量的行。

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

问题2:有,现有的DATETIME数据转换成SMALLDATETIME没有任何错误任何安全ALTER TABLE表语句?

问题3:当我使用ALTER TABLE时,现有索引会根据CreateDate而发生什么变化?

+0

根据MSDN,它建议其他数据类型的新工作。这可能意味着该功能在未来版本中可能会被弃用,但他们并未明确表示这一点。 https://msdn.microsoft.com/en-us/library/ms182418.aspx – dfundako

+2

或者,如果您还没有使用企业版,并且使用页面压缩功能,则每次可节省远远超过4个字节行。由于问题四舍五入,SMALLDATETIME真的非常糟糕。它不会忽略秒,它可以让你的时间戳跳到未来。只有很少的日志可以诚实地说这种精度降低并不重要。 –

回答

1

是的,你可以用小日期时间数据类型的情况。

与SMALLDATETIME

SMALLDATETIME处理时,该警告将有一个不每毫秒时间为0秒。但请注意,小日期时间会将分钟值舍入到最接近的分钟值。

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

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

我的建议是与SMALLDATETIME数据类型创建一个多个列。并通过将日期时间列转换为smalldatetime来更新它。并放下您的日期时间列。

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

来到索引器。您可以在此列上创建相同的索引器。据我所知在Smalldatetime上使用索引器比在datetime上使用索引器好。由于日期时间值以毫秒为单位在每列的最大值上不同。

我希望这个信息可能会帮助你。

0

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

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

  2. 精度可能是有人重要的地方。

  3. 保存的数据。是的,SmallDateTime是half DateTime的size,但取决于你有多少记录和表有多大,这对你来说可能不是什么大问题。是的,较小的数据量可能会使事情稍微快一点。

相关问题