我有一个用户表,其中包含许多属性,如电子邮件、用户名、密码、电话等。
我想保存一种新的数据类型(整数),我们称它为“超能力”吧,但只有极少数用户会拥有它。 users 表包含 10K+ 条记录,而少于 10 个用户将拥有 super 大国(对于所有其他用户,它将为空)。
所以我的问题是以下哪个选项在性能方面更正确且更好:
在用户表中添加另一个名为“superpower”的列,该列对几乎所有用户都为空
有一个名为 users_superpower 的新表,它最多包含 10 条记录并将用户映射到 super 大国。
我想到的一些事情:
一个。第一个选项看起来很浪费空间,但它实际上只是一个小数...
每次我查询用户时,第二个选项都需要左连接...
例如,如果“ super 大国”数据是 5 列,答案会改变吗?
注意:我正在使用 hibenate 和 mysql,如果它改变了答案
最佳答案
这可能是一个见仁见智的问题。我对此的看法如下:
如果superpower
是用户的一个属性,而你没有添加属性的习惯,那么你应该将它添加为一个列。 10,000*4 额外字节的开销不是很大。
如果 superpower
只是一个属性,您可能会添加其他属性,那么我建议使用 JSON 或其他 EAV 表来存储该值。
如果superpower
确实是具有其他属性和日期等的新型用户,则创建另一个表。在此表中,主键可以是 user_id
,使表之间的连接更加高效。
关于mysql - 最佳做法是什么——新列还是新表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51284184/