通过单个连接的JDBC选择查询是否比包含这些查询的proc效率低?

时间:2018-11-15 05:32:41

标签: java oracle jdbc

如果我打开一个JDBC连接(对于Oracle),并执行多个select查询,它会比调用执行那些查询并在游标中返回结果的过程效率低吗?

编辑:示例查询为:

select id, name from animals;
select * from animal_reservoir where animal_id=id;

(实际的第一个查询会非常复杂,返回的id将在第二个查询中多次用作输入。因此,第一个查询在第二个查询中不能用作子查询。而且,查询无法合并。)

2 个答案:

答案 0 :(得分:1)

您尚未提供必须使用过程的SQL查询

您可以使用with子句对多个“内部SQL”执行1个SQL查询:

with animals as (
select id, name from animals
)
select * from animal_reservoir,animals where animal_id=animals.id;

答案 1 :(得分:1)

两个主要区别是

  • 往返次数较少(如果有很多小查询,则很重要,否则就不多了)
  • 无需将“中间”结果(仅在下一个查询中需要,但最终不需要)发送回客户端

影响到底有多大取决于应用程序。

通常,可能还有其他选择(例如首先发出不同类型的查询;有人在注释中提到了JOIN或缓存-或建立索引-或数据非规范化-或... )也要考虑。

像往常一样,先做最自然的事情,并在发现问题时进行优化。