Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用JDBC查询数据库最有效的方法是什么?_Java_Sql_Join_Jdbc - Fatal编程技术网

Java 用JDBC查询数据库最有效的方法是什么?

Java 用JDBC查询数据库最有效的方法是什么?,java,sql,join,jdbc,Java,Sql,Join,Jdbc,我需要从几个表中获取数据,所以我使用了一个具有N个左外部联接的查询。在我看来,这可能是对性能的浪费,因为我得到了大量数据的笛卡尔积。为了获得更好的性能,哪种方法更可取?我正在考虑做N+1个小查询。我走对了吗 我知道,这与JDBC的细节关系不大。我想从单个表中检索数据,并与其他N个表进行左外部联接。结果集变得非常大,因为我得到了笛卡尔积。例如: 表1数据1、表2数据1、表3数据1 表1数据1、表2数据2、表3数据1 表1数据1、表2数据1、表3数据2 表1数据1、表2数据2、表3数据2 我知道,如

我需要从几个表中获取数据,所以我使用了一个具有N个左外部联接的查询。在我看来,这可能是对性能的浪费,因为我得到了大量数据的笛卡尔积。为了获得更好的性能,哪种方法更可取?我正在考虑做N+1个小查询。我走对了吗

我知道,这与JDBC的细节关系不大。我想从单个表中检索数据,并与其他N个表进行左外部联接。结果集变得非常大,因为我得到了笛卡尔积。例如:

表1数据1、表2数据1、表3数据1

表1数据1、表2数据2、表3数据1

表1数据1、表2数据1、表3数据2

表1数据1、表2数据2、表3数据2


我知道,如果a对数据库进行多次查询(例如在我的示例中,我得到表1的1条记录、表2的2条记录和表2的2条记录),我将对数据库进行多次往返。但是我已经用这种方法进行了测试,它看起来快多了。

这确实不是JDBC特有的。一般来说,根据返回的数据量,在单个结果集中检索所有内容将获得更好的性能。N+1查询往往会导致大量到数据库的往返。结果集是否包含不需要的字段?你能修剪返回的列吗?如果可能的话,这将是第一步。

我认为您当前的方法是在一次数据库访问中获取大量数据。但是,如果您发现自己使用不同的参数多次执行同一查询,那么使用绑定变量将其作为存储过程编写会更有效。但我绝对不会将您的加入分解为几个较小的查询。

这取决于您试图实现什么,但N+1小查询几乎从来都不是最好的方式。你能举个例子说明你拥有什么和你想得到什么吗?外部连接与笛卡尔乘积完全不同。如果你得到很多笛卡尔乘积,你的查询很可能是错误的。