性能类型 varchar(1) 或 smallint 来存储状态 Postgres

performance type varchar(1) or smallint to store status Postgres

我将存储一个从 0 到 7 的状态,我想知道哪个是更好的类型字段来存储,考虑到性能和 space 在 Postgres 数据库上:varchar(1) 或 smallint。

对了,设置一个字段varchar(1)和varchar(100)有什么区别吗,还谈性能和space?

在我看来,您打错了仗。您担心存储整数而不是单个字符字段对性能的影响,我认为这是短视的想法。整数与单个字符对性能的实际影响是微不足道的,我怀疑这是否可以有意义地衡量。根据我的经验,更重要的是减少系统开发人员和用户的认知负担,因此最好使用足够长的字符字段来包含对状态的合理描述,而不是数值或单个字符缩写。不必记住 1、2、'A' 或 'X' 的含义非常有帮助。我建议不要使用这些缩写值,而是使用易于理解的值,例如 'READY'、'ACTIVE'、'PROCESSED'、'CANCELLED' 等

至于问题的第二部分 - 不是。移动较长的字符串可能需要一些微不足道的时间,但除非您谈论的是数百万个值,否则这是微不足道的。

祝你好运。

虽然我同意 Bob Jarvis 的观点,即这确实是过早的优化,但我会尽量专注于提出的问题。

您忽略了最重要的选择。您的选择包括:

  • smallint
  • enum
  • "char"
  • charactercharacter varying

您可以使用枚举类型。只要您不希望删除有效值,这就真的没问题,因为 PostgreSQL 目前不支持从枚举类型中删除值。

或者,您可以使用 "char" 数据类型。是的,报价很重要。它是单个字符,如 C 数据类型 char。没有引号 char 在解析时变成 character(1)

varcharcharacter 并不是真正的理想选择,因为它们是 variable-width 类型,具有 header 开销等

By the way, is there any difference to set a field varchar(1) or varchar(100), still talking about performance and space?

没有。这在其他问题中得到了回答(多次)。