我正在调查一个我刚刚接手的数据库的性能问题。我可以看到由于查询将货币数据类型转换为日期,出现了很多隐式转换。看起来几乎所有的日期字段都有货币数据类型。
有人能告诉我为什么有人会使用货币数据类型来表示日期吗?这是个好的且有效的理由吗?
谢谢!
我正在调查一个我刚刚接手的数据库的性能问题。我可以看到由于查询将货币数据类型转换为日期,出现了很多隐式转换。看起来几乎所有的日期字段都有货币数据类型。
有人能告诉我为什么有人会使用货币数据类型来表示日期吗?这是个好的且有效的理由吗?
谢谢!
这种做法没有任何好的或合理的原因。
datetime
和money
都是8个字节。其中datetime
有4个字节用于date
,另外4个字节用于time
。
money
的范围从-922,337,203,685,477.5808
到922,337,203,685,477.5807
。当从money
转换为datetime
时,整数部分被视为自1900-01-01
以来的天数,而小数部分则表示一天的百分比。
这意味着您会失去time
部分的精度(每个0.0001
增量= 8.640
秒),并且通过能够存储数字远远超过datetime
的最大边界(9999 AD
)而获得无用的额外比例在date
部分中。
如果可能,请修复模式。
我认为这只是为了节省空间和实现次分钟粒度,但设计显然很奇怪。
可能是为了避免DATETIME和SMALLDATETIME的限制,但如果你说它经常转换成日期 - 这不太可能。
更新:
正如@Martin Smith所说 - 它并没有节省空间 - 那么设计就更加奇怪了。
还有一个建议 - 数据是从旧的遗留DB系统导入的,其中datetime值是以这种方式存储的。
显然 - 如果你寻找一个好的和有效的理由 - 那就没有了。
datetime
和money
都是8个字节。 - Martin Smith