我理解整数和浮点数据类型是如何存储的,我猜十进制数据类型的可变长度意味着它的存储更像一个字符串.

这是否意味着在使用DECIMAL数据类型并对其进行搜索时会产生性能开销?

推荐答案

帕维尔说得很对,我只想解释一下.

假设您指的是与浮点或定点偏移整数(即将千分之一美分存储为整数)相比的性能影响:是的,这对性能有很大影响.PostgreSQL和MySQL的声音,将DECIMAL/NUMERIC存储为二进制编码的十进制.这种格式比将数字存储为文本更紧凑,但使用效率仍然不是很高.

如果您在数据库中没有进行很多计算,那么影响仅限于BCD与整数或浮点相比所需的更大存储空间,因此行更宽、扫描速度较慢、索引更大等.b树索引搜索中的比较操作也较慢,但这还不够重要,除非你已经因为其他原因限制了CPU.

如果您使用数据库中的DECIMAL/NUMERIC值进行大量计算,那么性能可能真的会受到影响.这一点尤其明显,至少在PostgreSQL中是这样,因为PG不能对任何给定的查询使用多个CPU.如果您正在进行大量的除法和乘法、更复杂的数学运算、聚合等数值运算,您可能会发现自己在使用浮点型或整型数据类型时永远不会受到CPU的限制.这在类似OLAP(分析)的工作负载以及加载或提取期间的报告或数据转换(ETL)中尤为明显.

尽管存在性能影响(根据工作负载从可忽略到相当大而有所不同),但当numeric/decimal是最适合您的任务的类型时,通常应该使用numeric/decimal,即当必须存储非常高的范围值和/或舍入误差不可接受时.

有时,使用大整数和定点偏移量的麻烦是值得的,但这是笨拙和僵硬的.相反,使用浮点数很少是正确的答案,因为可靠地处理诸如货币之类的浮点值所面临的所有挑战.

(顺便说一句,我很高兴一些新的英特尔CPU,以及IBM的Power 7系列CPU,包括对IEEE 754十进制浮点的硬件支持.如果这在低端CPU中可用,对数据库来说将是一个巨大的胜利.)

Database相关问答推荐

当某些 node 死亡时,mongo 副本集选举如何表现?

Spring Data JPA 对 SQL 注入安全吗

sql-dump 有什么用?

如何使用错误消息中指定的 tbspaceid tableid 在 DB2 中查找表和列

用于存储食谱的数据库设计

更新查询 PHP MySQL

在 postgresql 中将列从字符串更改为字符串数组

ORM vs 传统数据库查询,它们的字段是什么?

为什么String or Binary data would be truncated不是更具描述性的错误?

MS Access 迁移的前端?

此平台不支持 LocalDB

在 MySQL 存储过程中使用if和else

MongooseJS - 如何找到具有最大值的元素?

cURL 和 PHP 显示1

PostgreSQL 唯一索引和字符串大小写

如何删除除了postgres中的少数数据库之外的所有数据库

存储信用卡号 - PCI?

SQL 截断数据库?如何截断所有表格

从数据库中获取事件

xampp phpmyadmin,格式参数不正确