检索数据库中的条目时,在SELECT语句中使用 ORDERBY 时,将值存储为浮点数或十进制数与将int存储值之间有区别吗?
最佳答案
这取决于。您没有指定RDBMS,所以我只能专门针对SQL Server,但是数据类型具有与之相关的不同存储成本。 Ints的范围是1到8个字节,Decimals的范围是5-17,而floats的范围是4到8个字节。
RDBMS将需要从磁盘读取数据页以找到您的数据(最坏的情况),并且它们只能容纳8k页数据中的这么多行。因此,如果您有17个字节的十进制数,那么与每次正确地调整数据大小并使用成本为1字节的tinyint来存储X相比,每次读取的行读取数据量将是磁盘读取数据的1/17。
当您对数据进行排序(排序)时,该存储成本将具有链式效应。它将尝试在内存中进行排序,但是如果您有不计其数的行并且饿了,可能会转储到临时存储中进行排序,而您要一遍又一遍地支付费用。
索引可能会有所帮助,因为可以按排序的方式存储数据,但是如果将数据存储到内存中对于肥胖的数据类型可能效率不高,那么索引也可以提供帮助。
[编辑]
@Bohemian很好地说明了整数与浮点比较的CPU效率,但是将CPU峰值负载在数据库服务器上的情况很少见。您很可能会受到磁盘IO子系统和内存的限制,这就是为什么我的答案集中在将数据放入引擎以执行排序操作与比较CPU成本之间的速度差异上。
关于performance - int和float的顺序是否有速度差异?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7360824/