在Java中,多个select查询或join,哪一个更好?

在Java中,多个select查询或join,哪一个更好?,java,mysql,database,join,Java,Mysql,Database,Join,我在MySQL数据库中有五个表,每个表都与存储用户名和密码的用户表有一对一的关系,用户表中有一个User_id字段作为所有其他表的外键 如果我需要用Java实现一个“Login”函数,以便从这五个表中获取某个用户的所有数据,那么使用JOIN同时查询这五个表是否是一种好的做法 我还有另一个问题,将这五个表合并为一个表是否更好,因为它们有一对一的关系?作为一般原则,1对1的关系应该在同一个表中 例外情况包括: 特权分离-mysql用户具有不同的表级访问权限 锁定分离,一个表作为更新率特别高的字段,

我在MySQL数据库中有五个表,每个表都与存储用户名和密码的用户表有一对一的关系,用户表中有一个User_id字段作为所有其他表的外键

如果我需要用Java实现一个“Login”函数,以便从这五个表中获取某个用户的所有数据,那么使用JOIN同时查询这五个表是否是一种好的做法


我还有另一个问题,将这五个表合并为一个表是否更好,因为它们有一对一的关系?

作为一般原则,1对1的关系应该在同一个表中

例外情况包括:

  • 特权分离-mysql用户具有不同的表级访问权限
  • 锁定分离,一个表作为更新率特别高的字段,而不是需要与另一个表分开的用户ID 高用户ID更新
  • 性能-行大小-一个表有大量不经常需要的列,因此请通过 将这些列保留在不同的表中

作为一般原则,1对1关系应在同一个表中

例外情况包括:

  • 特权分离-mysql用户具有不同的表级访问权限
  • 锁定分离,一个表作为更新率特别高的字段,而不是需要与另一个表分开的用户ID 高用户ID更新
  • 性能-行大小-一个表有大量不经常需要的列,因此请通过 将这些列保留在不同的表中

创建具有外键引用的多个表背后的思想是支持一对多关系。由于表数据具有一对一关系,如果包含所有表的列数(具有一对一关系)小于Mysql表列计数限制,则创建多个表是没有意义的


如果您的业务需求不允许更改当前模式,您可以使用join在单个网络调用中获取所有数据,而不是进行多个网络调用来获取数据,因为网络调用延迟是不可预测的。

使用外键引用创建多个表背后的想法是支持一对多关系。由于表数据具有一对一关系,如果包含所有表的列数(具有一对一关系)小于Mysql表列计数限制,则创建多个表是没有意义的


如果您的业务需求不允许更改当前架构,您可以使用join在单个网络调用中获取所有数据,而不是通过多次网络调用获取数据,因为网络调用延迟是不可预测的。

注意:不要存储纯文本密码。使用密钥派生函数或至少对每个用户使用唯一的salt进行salt散列。注意:不要存储纯文本密码。使用密钥派生函数或至少对每个用户使用唯一的salt进行salt散列。感谢您的回复!在这种情况下,出于对性能的考虑,我将表分为多个不同的表。如果主用户表与其他几张表有1对多的关系,那么有没有一种有效的方法来查询所有这些数据?我应该知道,在非常特殊的情况下,使用这种方法可以量化性能。不要仅仅因为你认为它会更好而使用它。当您在innodb缓冲池上运行高周转率时,您只会遇到这个问题,而使用较少的字段非常大,并且大部分未使用。对于一对多,请确保您。[DBA exchange](DBA.stackexchange.com/)是一个更关注数据库的论坛。感谢您的回复!在这种情况下,出于对性能的考虑,我将表分为多个不同的表。如果主用户表与其他几张表有1对多的关系,那么有没有一种有效的方法来查询所有这些数据?我应该知道,在非常特殊的情况下,使用这种方法可以量化性能。不要仅仅因为你认为它会更好而使用它。当您在innodb缓冲池上运行高周转率时,您只会遇到这个问题,而使用较少的字段非常大,并且大部分未使用。对于一对多,请确保您。[DBA exchange](DBA.stackexchange.com/)是一个更关注数据库的论坛。感谢您的回复!将它们拆分为多个表的原因是,其中一些列不像其他列那样经常使用。然而,使用JOIN同时查询这五个表似乎是一种合理的方法。如果我还有几个表与用户表有1对多关系,使用JOIN是一种有效的查询方式吗?如果表是以正确的方式创建的,并且具有所需的约束/索引,则数据库引擎会尝试以最佳方式获取数据,这将远远优于不可预测的多个网络调用。感谢您的回复!将它们拆分为多个表的原因是,其中一些列不像其他列那样经常使用。然而,使用JOIN同时查询这五个表似乎是一种合理的方法。如果我还有几个表与用户表有1对多关系,那么使用JOIN是查询它们的有效方法吗?如果表是以正确的方式创建的,并且具有所需的约束/索引,那么数据库引擎将尝试以最佳方式获取数据,这将远远优于不可预测的多个网络调用。