gpt4 book ai didi

java - 重复选择或使用 IN 子句,哪个更快?

转载 作者:行者123 更新时间:2023-11-29 10:13:32 25 4
gpt4 key购买 nike

我发现在使用集合作为选择条件时设计 JDBC/JPA 查询时,这种情况很常见。

假设有一个包含 50,000 条记录的表,其字段 order_id 已正确索引。现在 java 应用程序有一个包含 500 个订单 ID 的列表来查找订单详细信息,并且需要为每个订单对象分配值。所以可以有两种方案

1. run 500 SELECT queries

for(String id:order_ids){
Order order = QueryAgent.execute("SELECT * FROM ORDES o WHERE o.order_id ="+id);
modifyOrder(order);
}

2. run one query whith 500 parameters in

String orders_in_string = getOrdersInString(order_ids);
List<Order> orders = QueryAgent.execute("SELECT * FROM ORDES o WHERE o.order_id IN ="+orders_in_string);
for(Order order:orders){
modifyOrder(order);
}

我不知道哪个性能更好。

最佳答案

这两个查询将返回相同数量的结果。因此,您真正的问题是哪个更快:运行 500 个小查询或一个大查询以获得相同的结果。

性能问题的正确答案是鼓励您在您的系统上尝试它,看看在您的环境中哪个对您的数据更快。

在这种情况下,有充分的理由期望单个查询会更快。 SQL 会在解析查询(或查找已解析的等效查询)、启动查询和准备结果时产生开销。所有这些在每个查询中发生一次。因此,我希望一个查询会更快。

如果 order_id 的列表已经来自数据库,我会建议构建一个更复杂的查询,这样他们就不必返回到应用程序。像这样的东西:

select o.*
from orders o
where o.order_id in (select . . . );

另外,如果您不需要所有的列,您应该明确地选择您想要的列。实际上,在所选择的列中始终明确是个好主意。

关于java - 重复选择或使用 IN 子句,哪个更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25232462/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com