在不同的整数类型中保存相同的值有什么区别吗?

时间:2015-11-07 13:51:45

标签: python django postgresql database-design django-models

Django中的主要整数字段如下,

  

整数字段

     

一个整数。从 -2147483648 2147483647 的值在Django支持的所有数据库中都是安全的。此字段的默认表单窗口小部件是localize为False时的NumberInput或否则为TextInput。

  

SmallIntegerField

     

与IntegerField类似,但仅允许某个(依赖于数据库)点下的值。从 -32768 32767 的值为   在Django支持的所有数据库中都是安全的。

  

BigIntegerField

     

一个64位整数,非常类似于IntegerField,但它保证适合 -9223372036854775808 9223372036854775807 的数字。此字段的默认表单窗口小部件是TextInput。

如果我有一个数字,33432(某些数字适合所有字段),如果我选择在以下所有字段中存储相同的数字,是否会过多使用内存数据库还是运行时?

number0 = models.SmallIntegerField()
number1 = models.IntegerField()
number2 = models.BigIntegerField()

我的数据库是PostgreSQL。

2 个答案:

答案 0 :(得分:1)

对于普通integer,大多数操作都是最快的,但差异非常小,通常是您在优化性能时最不关心的问题。

存储大小更相关,但各种整数类型之间的差异仍然非常小并且通常几乎不相关,有时会因填充和对齐而丢失。还有其他数据类型会浪费更多空间。

smallintint2)在磁盘和RAM中占用2个字节 integerintint4)在磁盘和RAM中占用4个字节 bigintint8)在磁盘和RAM中占用8个字节。

Details for numeric types in Postgres in the manual.

实际存储大小还有其他各种因素。您必须考虑页面和元组开销,对齐和填充,可能的NULL值,索引......

详细说明:

有一些优化潜力,但通常不多。最好集中精力为您的数据选择合适的数据类型,并且不要担心存储和性能方面的细微差别,除非您确切知道自己在做什么。

答案 1 :(得分:0)

是的,为数值数据分配的内存存储空间和运行时内存将与您选择的数字结构的字节大小成正比。

有一些压缩方法,例如将整数和小数更改为可变长度格式,而不是SQL Server的本机固定长度格式。但是,它们引入了更高的CPU使用率here