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

3
我需要从多个表中获取数据,因此我使用了一个带有N个左外联接的查询。我认为这可能会浪费性能,因为我获取了大量数据的笛卡尔积。为了获得更好的性能,应该采用哪种方式?我考虑进行N+1个小查询。我在正确的轨道上吗?
我知道,这与JDBC的具体细节关系不大。我想从单个表中检索数据,并向其他N个表进行左外连接。结果集变得非常庞大,因为我获得了笛卡尔积。例如:
table1data1,table2data1,table3data1
table1data1,table2data2,table3data1
table1data1,table2data1,table3data2
table1data1,table2data2,table3data2
我知道,如果对数据库进行多次查询(例如,在我的示例中,我为table1获取1条记录,为table2获取2条记录,为table2获取2条记录),我将使很多次往返到数据库。但我已经测试过这种方法,它看起来快得多。

这取决于您想要实现什么,但是N+1个小查询几乎从来不是最佳选择。您能否发布一个示例,说明您拥有什么以及您想要得到什么? - Jaydee
4
外连接与笛卡尔积是完全不同的概念。 - user330315
2
如果你得到了很多笛卡尔积,很可能是你的查询语句有误。 - m0skit0
2个回答

1

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


0

我认为你当前从数据库中获取大量数据的方法是正确的。但是,如果你发现自己需要多次执行相同的查询,只是参数不同,那最好将其编写成使用绑定变量的存储过程以提高性能。但是,我肯定会避免将JOIN拆分成几个较小的查询。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接