比如我有一条数据,这条数据有个类型字段,比如 主数据还是次级数据
这种场景下,我们表达类型可以用 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
mringg 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 分别对应什么。直接存字符串的话就怕不小心拼写错了就对不上了。
|