mysql - 最佳做法是什么——新列还是新表?

标签 mysql sql hibernate

我有一个用户表,其中包含许多属性,如电子邮件、用户名、密码、电话等。

我想保存一种新的数据类型(整数),我们称它为“超能力”吧,但只有极少数用户会拥有它。 users 表包含 10K+ 条记录,而少于 10 个用户将拥有 super 大国(对于所有其他用户,它将为空)。

所以我的问题是以下哪个选项在性能方面更正确且更好:

  1. 在用户表中添加另一个名为“superpower”的列,该列对几乎所有用户都为空

  2. 有一个名为 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/

相关文章:

mysql - 随机时间跨度后,AWS RDS MySQL性能下降

sql - 存储简单正则表达式的高效方法

java - Hibernate Search 空间构面查询首先运行 5 次,然后仅返回第 5 个结果

mysql - 反向子句 IN 命名查询 Hibernate

hibernate - JPA/Hibernate EntityGraph 和缓存

php - PDO 不会更新到 MySQL

mysql - 有没有办法在 mysql now() 函数中显示上午/下午?

php变量没有被正确填充

SQL Server : loop through every row, 向列添加增量值

sql - postgreSQL 内部连接位