0

使用 SQL Server 2014:

我正在处理一些大型日志表,其中一列是CreateDatedatatype DateTime

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

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

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

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

4

2 回答 2

1

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

处理 smalldatetime 时的警告

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

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

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

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

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

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

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

于 2016-11-09T19:09:32.543 回答
0

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

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

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

  3. 数据已保存。是的,SmallDateTime 是DateTime大小的一半,但取决于您有多少记录以及表有多大,这对您来说可能不是什么大问题。是的,较小的数据量可能会使事情变得稍微快一些。

于 2016-11-09T19:51:44.033 回答