MySQL中的枚举或char(1)

bey*_*ski 6 mysql performance

有时我不确定在MysQL中是否使用enum或char(1).例如,我存储帖子的状态.通常情况下,我只需要ActivePassivestatus现场估价.我有两个选择:

// CHAR
status char(1);

// ENUM (but too limited)
status enum('A', 'P');
Run Code Online (Sandbox Code Playgroud)

如果我想Hidden在将来再添加一种状态类型(即.)怎么样?如果我有小数据,这将不是问题.但是如果我的数据太大,那么编辑ENUM类型就会出问题.

那么如果我们考虑MySQL性能,你的建议是什么?我会走哪条路?

gbn*_*gbn 6

都不是.您通常将tinyint与查找表一起使用

  • char(1)会稍慢,因为比较使用整理

  • 混乱:当你延伸到A和P以上时

  • 在添加更多类型时使用字母限制您.见最后一点.

  • 我见过的每个系统都有一个以上的客户端,例如报告.A和P必须在每个客户端代码中解析为Active和Passive

  • 可扩展性:添加一个类型("S"表示"已暂停")您可以将一行添加到查找表或更改大量代码和约束.还有你的客户端代码

  • 维护:逻辑分为3个位置:数据库约束,数据库代码和客户端代码.使用查找和外键,它可以在一个地方

  • 枚举不便携

在使用单个字母或枚举的正面

注意:有关于Enums的相关DBA.SE MySQL问题.建议也在那里使用查找表.