帕维尔说得对,我只想解释一下.
假设您的意思是与浮点或固定点偏移量整数相比较的性能影响(即,将百分之一百分之一作为整数存储):是的,性能影响非常大. PostgreSQL,并通过MySQL的声音存储DECIMAL / NUMERIC二进制编码十进制.这种格式比将数字存储为文本更紧凑,但它仍然不是非常有效的工作.
如果您在数据库中没有做很多计算,则影响仅限于BCD与整数或浮点相比所需的更大的存储空间,因此更宽的行和较慢的扫描,更大的索引等.b中的比较操作 – 索引索引搜索速度也较慢,但不够重要,除非您因其他原因而被CPU限制.
如果您使用数据库中的DECIMAL / NUMERIC值进行大量计算,则性能真的会受到影响.这一点尤其明显,至少在PostgreSQL中,因为Pg不能为任何给定的查询使用多个CPU.如果你正在做一大批分工在数字上乘法,更复杂的数学,聚合等,您可以在使用浮点数或整型数据类型的情况下开始找到自己的CPU限制.这在OLAP类(分析)工作负载以及加载或提取(ETL)期间的报告或数据转换中尤其明显.
尽管存在性能影响(根据工作负载从可忽略到不大)的事实,但是当您的任务是最合适的类型时,通常应使用数字/十进制 – 即,当非常高的范围值必须存储和/或舍入误差是不可接受的.
偶尔,使用bigint和定点偏移值得的麻烦是件麻烦的事情,但这是笨拙和不灵活的.使用浮点代替很少是正确的答案,因为所有的问题都可以像货币这样的浮点值可靠地工作.
(BTW,我非常兴奋的是,一些新的英特尔CPU和IBM的Power 7系列CPU都包含对IEEE 754十进制浮点数的硬件支持,如果这在下一代CPU中可用,数据库将是一个巨大的胜利.)