我有这样的子查询。基本上我使用多个分离标准来形成多个子查询。将子查询拆分为单独查询更高效?
SELECT
this_.id AS y0_,
this_.a AS y1_,
this_.b AS y2_,
this_.c AS y3_,
this_.d AS y4_,
this_.e AS y5_
FROM
table_a this_
WHERE
this_.id IN (
SELECT
this_.a AS y0_
FROM
table_b this_
WHERE
this_.b=?
)
目前我的数据库表中没有大量的数据。执行查询所用的时间少于0.01秒。但是现在我已被告知将每个子查询作为一个单独的查询来将值列表提供给每个IN语句。我不知道知情策略与当前子查询之间会有什么区别(上面已经提到)。如果使用分隔查询,子查询还会将ID列表返回给它的IN语句,那么ID列表也将被提供给IN语句?这两种策略如何在性能上有所不同?
我被告知,如果表中有大量数据,我当前的子查询将会变慢。两种策略都起着相同的作用。那么为什么它会导致子查询性能下降?
试想一个示例Java方法调用
public static void main(String[] args){
System.out.print(c(b(a())));
}
public String a(){
return "success";
}
public String b(String string){
return string;
}
public String c(String string){
return string;
}
首先a
将被调用,然后b
将被调用,这将与a
,终于c
将被称为回报将与回报进行饲料中喂的b
。然后将显示c
的回报。
我假设在MySQL子查询中也遵循同样的功能。我对吗?那么为什么当与所有单独查询的总时间比较时,子查询会导致性能下降?
为什么地球上,你会给每个表的相同的别名:/ –
@pala_,它不会是一个问题,因为这些别名是独立于其他子查询和主要查询的子查询。TBH,我没有给出这些别名,这些别名是由休眠生成的 –
我知道这不是执行问题,只是为了血腥的可读性。无论如何,[这里](http://stackoverflow.com/questions/29859808/why-does-a-query-with-an-in-subquery-take-longer-than-a-query-with-in-discret)是一个链接,可能有助于解释为什么子查询不能很好地扩展。 –