使用SQL Server 2014:
我正在使用一些大型日志表,其中一列是CreateDate
数据类型DateTime
。
有一些基于CreateDate
列的索引。所有表都已包含大量行数。
问题#1 :有没有什么理由不将所有CreateDate
列转换为SMALLDATETIME
类型?
问题#2 :是否有任何安全的alter table table语句可将现有DATETIME
数据转换为SMALLDATETIME
而不会出现任何错误?
问题#3 :当我使用ALTER TABLE
时,基于CreateDate
的现有索引会发生什么?
答案 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)