0

我有这样的子查询。基本上我使用多个分离标准来形成多个子查询。将子查询拆分为单独查询更高效?

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子查询中也遵循同样的功能。我对吗?那么为什么当与所有单独查询的总时间比较时,子查询会导致性能下降?

+0

为什么地球上,你会给每个表的相同的别名:/ –

+0

@pala_,它不会是一个问题,因为这些别名是独立于其他子查询和主要查询的子查询。TBH,我没有给出这些别名,这些别名是由休眠生成的 –

+1

我知道这不是执行问题,只是为了血腥的可读性。无论如何,[这里](http://stackoverflow.com/questions/29859808/why-does-a-query-with-an-in-subquery-take-longer-than-a-query-with-in-discret)是一个链接,可能有助于解释为什么子查询不能很好地扩展。 –

回答

1

我相信你是问什么的B/W相关子查询和子查询,其性能方面的差异

子查询: -内查询一次内部查询执行将得到执行第一和外部查询使用的内部查询的输出

相关子查询: -外部查询将首先执行,外部查询的每一行都会执行内部查询。因此,内部查询将被执行的次数与外部查询结果中的no.of次数一样多。

应用同相关子查询性能下降,因为它执行NXM迭代

+0

所以,我相信我的是一个相关的子查询,这将导致表现不佳。如果我必须将它作为子查询,我必须使用连接吗? –

+0

一种方式是联接,另一种方式是子查询/内部查询(不是相关的子查询) –

+0

那么看起来像我已经把它分离到单个查询,使它只是作为一个子查询,谢谢.. –