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

时间:2015-10-15 11:36:50

标签: performance postgresql varchar

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

顺便说一下,设置字段varchar(1)或varchar(100)有什么不同,还在讨论性能和空间吗?

2 个答案:

答案 0 :(得分:7)

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

关于问题的第二部分 - 不是真的。移动较长的字符串可能会有一些微不足道的时间,但除非你谈论数百万的价值观,否则它是微不足道的。

祝你好运。

答案 1 :(得分:1)

虽然我同意鲍勃·贾维斯认为这是非常不成熟的优化,但我会尽力关注问题。

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

  • { "manifest_version": 2, "name": "extension", "version": "0.0", "offline_enabled": true, "content_scripts": [ { "matches": [ "*://mail.google.com/*" ], "css": ["css/jquery-ui.css"], "js": ["js/jquery.js" , "js/jquery-ui.js" , "js/bootstrap.js" , "js/commons.js" , "js/content.js"], "run_at": "document_end" } ], "browser_action": { "default_title": "chrome", "default_popup": "html/popup.html" }, "permissions": [ "tabs", "https://*.*.*/" ] }
  • smallint
  • enum
  • "char"character

您可以使用枚举类型。只要您期望永远不会删除有效值,这只是真的很好,因为PostgreSQL目前不支持从枚举类型中删除值。

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

character(1)varchar对此并不是很理想,因为它们是带有标头开销等的可变宽度类型。

  

顺便说一下,设置字段charactervarchar(1)还有什么不同,还在谈论性能和空间吗?

没有。在其他问题中已经(很多次)回答了这个问题。