当前位置: 首页 > 面试题库 >

使用十进制数据类型(MySQL / Postgres)是否会对性能造成影响

荀裕
2023-03-14
问题内容

我了解整数和浮点数据类型的存储方式,并且我猜测十进制数据类型的可变长度意味着它的存储方式更像字符串。

使用十进制数据类型并针对它们进行搜索时,这是否意味着性能开销?


问题答案:

Pavel说得很对,我只想解释一下。

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

如果您没有在数据库中进行许多计算,则影响将限于与整数或浮点数相比,BCD需要更大的存储空间,因此行更宽,扫描速度更慢,索引更大等。b中的比较操作-
tree索引搜索速度也较慢,但这并不重要,除非您由于其他原因已经受到CPU的限制。

如果使用数据库中的DECIMAL/
NUMERIC值进行大量计算,则性能可能会受到影响。至少在PostgreSQL中,这一点尤其明显,因为Pg不能对任何给定查询使用多个CPU。如果您要对数字进行大量除法,乘法,更复杂的数学,聚合等操作,则在使用浮点或整数数据类型时再也找不到CPU的局限了。这在类似OLAP的(分析)工作负载中以及在加载或提取(ETL)期间进行报告或数据转换时尤其明显。

尽管有 一个性能的影响(其变化的基础上,从微不足道的工作量相当大),你通常应该使用numeric/
decimal时,它是最合适的类型,你的任务-即在非常高的范围值必须存储和/或倒圆错误是不可接受的。

有时,使用bigint和定点偏移量是很麻烦的,但这很笨拙且不灵活。取而代之的是使用浮点数很少是正确的答案,因为要为诸如货币之类的东西可靠地使用浮点数存在所有挑战。

(顺便说一句,我很高兴看到一些新的Intel CPU和IBM Power 7系列CPU都对IEEE
754十进制浮点数提供了硬件支持。如果低端CPU可以使用它,那将是数据库的巨大胜利。 )



 类似资料:
  • 我有几个表存储了相当大的数字,因此我选择作为所有列的数据类型。 架构示例: Table1(value1,value2,value3,value4,value5) Table2(value1,value2,value3,value4,value5)

  • 问题内容: 如果是这样,为什么呢?我的意思是,tinyint的搜索比int更快吗? 如果是这样,那么实际的性能差异是什么? 问题答案: 是的,根据数据类型,确实会有所不同。 vs.不会在速度上产生明显的差异,但是会在数据大小上产生差异。假设是1个字节,而不是4个字节,则每行保存3个字节。一段时间后加起来。 现在,如果它反对,那么将会有些下降,因为整数值之类的排序操作比字符串值要快得多。 如果它是可

  • 在我的C++程序中,有没有方法使用十进制数据类型,如、或?

  • 使用时,是否有需要考虑的性能影响? 我正在编写一个从目录检索文件的查询,这就是查询: 那么,在决定进行这样的转换时,是否应该考虑某种性能影响--还是只在处理大量文件时才考虑?这是一个可以忽略不计的转换吗?

  • 问题内容: 我创建了一个返回变量的函数,它所返回的变量的类型与函数本身的类型相同。 我还创建了一个视图,将该视图用作其中的列。这会自动将视图中该列的数据类型设置为。 这会导致性能/存储问题吗? 此外,对我来说,最好将a限制为应该使用的200个字符吗? Oracle 11g BTW。 问题答案: 即使您所做的一切都是使用SQL进行的,即使在任何地方使用都不会引起问题(在这种情况下也很可能不会引起问题

  • 问题内容: 当我在MySQL中执行此命令时: 它会影响整个引擎还是仅仅是我当前的交易? 问题答案: 在设置问题方式时,它是基于会话的。 https://dev.mysql.com/doc/refman/5.7/zh-CN/server-system- variables.html 据此,以“两者”为范围。这意味着可以为会话设置它: 或全球: