比如我有一条数据,这条数据有个类型字段,比如 主数据还是次级数据
这种场景下,我们表达类型可以用 1,2 也可以用字符串 main secondary
我考虑着,在不考虑存储容量的情况下,用哪种类型,对于数据库来说,是不是是一样的啊?
以前的话,服务器蛮贵的,很多时候要考虑容量,现在一般都不太考虑容量了
请教各位大佬,除了存储容量之外,哪种类型,会有性能影响不?
谢谢
1 lmshl 2022-08-15 11:44:17 +08:00 mysql / postgresql 都原生支持 enum type ,可以结贴了吧 |
2 brader 2022-08-15 11:47:19 +08:00 这类数据我自己以及见过比较多的是使用 tinyint 做状态 |
3 zmal 2022-08-15 11:48:21 +08:00 mysql 的 emun 蛮垃的,千万别用。 mysql 的话正常来说用 tinyint 就可以了。用什么类型更多是业务方面的考量,性能差距不大。 |
4 Leviathann 2022-08-15 11:48:29 +08:00 @lmshl mysql 老版本不支持 |
![]() | 5 qW7bo2FbzbC0 2022-08-15 11:49:40 +08:00 实际我遇到的情况看来,数据库中很少用 enum 格式的,而且不止为何,不推荐使用 enum 格式。 我更推荐 int 或 varchar 这种直接的类型。 单就 int 和 varchar 来说,如果情况可以固定描述,我更倾向于 varchar 这种显式表意的方式 另,在 sof 上也有些人推荐使用 static class with const property 来取代代码中的 enum 类型 |
![]() | 6 xtreme1 2022-08-15 11:51:45 +08:00 @qW7bo2FbzbC0 数据库 enum 你新增一次类型,就得改一次 ddl |
7 lmshl 2022-08-15 11:58:11 +08:00 懂了,结论:别用垃圾 mysql 。 起码 postgresql 的 enum 只要不改顺序,新增类型都是瞬间完成的。 |
![]() | 8 westoy 2022-08-15 12:02:12 +08:00 有一港一, 我用 pg 一样用 smallint ,enum 是咩? |
![]() | 9 ming2050 2022-08-15 12:32:20 +08:00 如果没有排序、超高性能需求,字符串更直观些 |
10 swcat 2022-08-15 12:46:06 +08:00 我自己设计的话, 之前一般都是 tinyint, 总部那边同步过来的都是 char, 比如 currency, country, ap code, 状态 因为这个被叼过, 可读性比少存要重要 |
![]() | 11 heyjei 2022-08-15 13:08:25 +08:00 我直接用 varchar ,比如字段 status 直接用 正常,停用等,要使用 123 ,你还得维护一套码表。 |
12 9y7cz863P00C7Lie 2022-08-15 13:15:36 +08:00 @lmshl 在存储大小(与个数相关)和不改顺序的情况下,mysql 也是瞬间完成的 |
![]() | 13 debuggerx 2022-08-15 13:23:19 +08:00 用枚举,用其他的都是大聪明行为,不解释 |
![]() | 14 ragnaroks 2022-08-15 13:28:19 +08:00 各种数据库实现的 byte 类型,实体类写好 getter/setter 转换关系 |
![]() | 15 lovephpframework 2022-08-15 15:32:16 +08:00 肯定会影响性能啊,int 更快,建议用 tinyint,然后具体含义在 php 里用 const 定义好,写在 mysql 的注释里面基本没人看,业务改了之后也容易忘记改 |
16 nothingistrue 2022-08-15 16:01:52 +08:00 首先排除数据库的枚举类型除非你明确使用一种数据库且这数据库对枚举类型支持的很好,否则遍地是坑。 如果你真得不考虑存储容量的话,用字符串是最省事和最可靠的,他能跟枚举无缝对接。但是事实上除了演示系统外没有不考虑容量的。就算你不考虑存储容量,也得考虑索引空间。就算上面都不考虑,( Java )枚举自身也可能会扩展成 value-name-detail 的字典形式。所以在适当的时候,这个适当的时候由你自己决定,还是要考虑用 tinyint 类型。 |
17 dcsuibian 2022-08-15 16:23:11 +08:00 倾向于字符串,对 DBA 更友好。 如果你对性能要求特别高,那用数字整形也可以。但从数据库里取出来的时候,要尽快转换成字符串或枚举。 最恶心的是那种从数据库到 json 都是数字的。 鬼知道这个数字代表什么,就算知道了,每次看到这个数字,自己脑袋里还得先 map 一下。 |
![]() | 18 murmur 2022-08-15 16:23:26 +08:00 我们的 type 现在全是英文,枚举也是英文,做报表就知道这样的好处了,你如果全是 int 代表类型,没有编码表,做报表的想杀人 |
![]() | 19 murmur 2022-08-15 16:24:03 +08:00 不对,type 是中文,utf8 环境拼音和英文没任何区别,换成英文多此一举短字符串果断中文 |
![]() | 20 xuanbg 2022-08-15 16:34:11 +08:00 用数字不会写错,因为无论谁用这个字段都要先搞清楚 123 分别对应什么。直接存字符串的话就怕不小心拼写错了就对不上了。 |