我将存储一个从0到7的状态,我想知道哪个是更好的类型字段,考虑Postgres数据库的性能和空间:varchar(1)或smallint。
顺便说一下,设置字段varchar(1)或varchar(100)有什么不同,还在讨论性能和空间吗?
答案 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
对此并不是很理想,因为它们是带有标头开销等的可变宽度类型。
顺便说一下,设置字段
character
或varchar(1)
还有什么不同,还在谈论性能和空间吗?
没有。在其他问题中已经(很多次)回答了这个问题。