Using SQL Server 2014:
我正在使用一些大型日志表,其中一列是数据类型DateTime
的CreateDate
。
基于CreateDate
列的索引很少。
问题#1:是否有任何好的理由不将所有CreateDate
列转换为SMALLDATETIME
类型?
问题#2:是否存在安全的alter table语句,将现有的DATETIME
数据转换为SMALLDATETIME
而不会出现任何错误?
问题#3:当我使用ALTER TABLE
时,基于CreateDate
的现有索引会发生什么?
是,您可以使用小型日期时间数据类型。
处理smalldatetime
Smalldatetime每次都有0秒,没有毫秒。但是要注意,小日期时间会将分钟值四舍五入到最接近的分钟值。
如果您的datetime列包含类似'2016-08-06 11:49:31.667'的值,则示例。那么小日期时间值将是'2016-08-06 11:50'。它将日期时间四舍五入到最接近的值50分钟,而实际上是49分钟。
我认为修改数据的最好方式
我的建议是用smalldatetime数据类型再创建一个列。并通过将datetime列转换为smalldatetime来更新它。删除datetime列。
索引器更改数据类型时的部分
进入索引器。您可以在此列上创建相同的索引器。据我所知,在Smalldatetime上有Indexer比在datetime上有Indexer要好。因为每列的datetime值的最大值相差毫秒。
我希望这些信息能对你有所帮助。
我真的认为,如果它没有坏,就不要改变它。至少,不要在没有全面调查和计划的情况下改变它。原因:
-
可能存在基于您不知道的数据类型的依赖项。如果这是一个成熟的产品,也就是说,它不是在最近几个月内创建的,那么你可能不知道该栏的所有内容,或者如果更改数据类型可能会中断的列。
-
数据保存。是的,SmallDateTime的大小是DateTime的一半,但这取决于您有多少记录和表的大小,这对您来说可能不是那么大的问题。是的,更小的数据量可能会让事情变得更快。