我目前正在重新设计一个在SQL Server 2005上运行的旧数据库,我想用小数替换大多数旧的浮点数。
十进制(15,4)足以满足我的需要,但SQL Server doc表示这将使用相同的存储空间(9字节)作为十进制(19,4)。在相同的存储空间中拥有更大的数字似乎是一个好主意。那么:有什么理由我不使用(19,4)的最大精度?性能上的缺点可能呢?请注意,我不会在数据库中进行大量计算,只会在查询中进行一些SUM或乘法。
答案 0 :(得分:4)
尽管使用相同数量的存储空间,但使用较小数据精度的主要原因是向系统的未来用户传达意义。这也是使用适当数据类型的重要原因 - 例如DECIMAL(15,4)表示数字,钱是钱。
答案 1 :(得分:2)
对于4位小数,如果可以,请使用金钱
原因:它比小数快,但确切
编辑:基于评论
有趣的论点。我关注两个博客。
请注意此处的示例:基于数据类型和优先级的不同精度
declare @d decimal(19,4), @ddiv decimal(19,4)
set @d = 12.39
SET @ddiv = 1000
select (@d/@ddiv)*@ddiv, (@d/1000)*1000
--Gives 12.390000 12.390000000
我在这里解答“T-SQL Decimal Division Accuracy”
现在,这很有趣。十进制,不同的答案
declare @d decimal(19,4), @ddiv decimal(19,4)
set @d = 12.39
SET @ddiv = 1001
select (@d/@ddiv)*@ddiv, (@d/1001)*1001
--Gives 12.390000 12.389999622
回到金钱:每个人都有相同的答案
declare @d money, @ddiv money
set @d = 12.39
SET @ddiv = 1001
select (@d/@ddiv)*@ddiv, (@d/1001)*1001
--Gives 12.3123 12.3123
道德:存储在SQL中,以客户端语言处理......
答案 2 :(得分:0)
在性能方面,没有理由不使用十进制(19,4)。我个人并不认为使用不同的精度只是为了传达意义"这是有道理的,不仅因为正确的文档(甚至对该领域的评论)会处理这个问题,尤其是因为业务规则确实发生了变化。
如果使用MONEY是首选,请注意潜在的准确性缺陷:https://groups.google.com/forum/?hl=en#!topic/microsoft.public.sqlserver.server/4ZvwaOII3Vs