Dre*_*mer 1 java sql oracle jpa java-ee
我发现当使用集合作为选择条件时,设计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);
}
Run Code Online (Sandbox Code Playgroud)
我不知道哪一个获得了更好的表现.
这两个查询将返回相同数量的结果.因此,您真正的问题是哪个更快:运行500个小查询或一个大型查询以获得相同的结果.
对性能问题的正确答案是鼓励您在系统上进行尝试,并在您的环境中查看哪些数据更快.
在这种情况下,完全有理由期望单个查询更快.SQL在解析查询(或查找已解析的等效查询),启动查询和准备结果时会产生开销.所有这些都发生在每个查询一次.所以,我希望一个查询更快.
如果order_ids 的列表已经来自数据库,我建议构建一个更复杂的查询,这样他们就不必返回应用程序了.就像是:
select o.*
from orders o
where o.order_id in (select . . . );
Run Code Online (Sandbox Code Playgroud)
此外,如果您不需要所有列,则应该明确选择所需的列.实际上,在所选列中始终明确是一个好主意.
| 归档时间: |
|
| 查看次数: |
77 次 |
| 最近记录: |