我的 MySQL ( InnoDB ) 中有一个表,里面有用户项。基本上每一行都有一个 user_id 字段和其他项目属性,如颜色。然后还有一个称为链接的字段,它包含其他用户项目的 id,但在大多数情况下(90%)没有链接项目,因此该字段设置为NULL
。
我想知道创建一个包含链接信息的新表是否比将字段链接设置为600 万行中的90%更有效?NULL
我正在使用休眠。
我的 MySQL ( InnoDB ) 中有一个表,里面有用户项。基本上每一行都有一个 user_id 字段和其他项目属性,如颜色。然后还有一个称为链接的字段,它包含其他用户项目的 id,但在大多数情况下(90%)没有链接项目,因此该字段设置为NULL
。
我想知道创建一个包含链接信息的新表是否比将字段链接设置为600 万行中的90%更有效?NULL
我正在使用休眠。
是的,这样会更有效率。这将产生非常小的差异。
最好的办法是做任何对你来说最容易的事情,然后当它成为一个真正的问题时改变它。
是的,它会更有效,更规范。每当我看到一个有很多这样的空值的表时,我认为它是规范化的候选者。在此示例中,您可以从表中完全删除该列,这样会更干净且更易于维护。您只需创建一个联结表,其中包含两个 user_id,它们是用户项目表上的外键。
它会占用更少的空间。但是,如果您为每个查询执行(左)JOIN,则性能会变得更糟.. 特别是如果您有很多行并且表不适合内存。然后你需要两次磁盘查找来获取一条记录。
更新:
就您的逻辑而言,只需考虑仅存储带有链接数据的表,并且调用 if 的代码可以执行“if not null”或等效于始终知道要获取的内容。如果您可以做出更好的假设,请不要存储所有这些空值