我有一个用户表,它包含许多属性,如电子邮件、用户名、密码、电话等。
我想保存一种新类型的数据(整数),让我们称之为“超级大国”,但只有极少数用户会拥有它。users表包含10K+记录,而只有不到10个用户拥有超能力(对于所有其他用户来说,它将为null)。
因此,我的问题是,下列哪一种选择在性能方面更正确和更好:
有些事我想过了:
第一种选择似乎浪费了空间,但实际上它只是一个诱饵.
第二个选项是每次我查询用户时都需要一个左连接.
如果“超级大国”数据是5列的话,答案会改变吗?
注意:我使用hibenate和mysql,如果它改变了答案
发布于 2018-07-11 11:23:48
这可能是一个意见问题。我对此的看法如下:
如果superpower是用户的属性,并且不习惯添加属性,那么应该将其作为列添加。10,000*4字节并不是很大的开销。
如果superpower只是一个属性,您可以添加其他属性,那么我建议使用JSON或另一个EAV表来存储值。
如果superpower实际上是一种具有其他属性和日期等的新用户类型,那么创建另一个表。在这个表中,主键可以是user_id,这使得表之间的连接更加高效。
发布于 2018-07-11 11:26:54
我只需要在您的用户实体中添加一个新的布尔字段,以跟踪该用户是否拥有超能力。
请注意,添加一个新表并链接它需要在当前用户表中创建一个外键,此键将是占用空间的另一列。所以它并不能避免存储。如果您只想要一个非常小的列来存储用户是否具有超能力,则可以使用boolean变量,该变量将映射到MySQL BIT(1)列。因为这是一个固定宽度的列,所以NULL值仍然占用一小部分空间,但与表的其他部分相比,这并不是一个很大的存储问题。
https://stackoverflow.com/questions/51284184
复制相似问题