-1

如何提高下面给出的查询的性能

select 
     distinct o1.id as c1, 
              a1.id as c2,
              o1.t1_id as c3, 
              o1.t2_id as c4,
              o1.t_p_id as c5 
from 
     ord o1 
     left outer join 
     acc a1 
       on o1.end_user_id=a1.id 
     left outer join 
     acc a2 
       on 1.t1_id=a2.id 
     left outer join 
     acc a3 
       on o1.t2_id=a3.id 
     left outer join 
     acc a4 on 
       o1.t_p_id=account4_.id 
where 
     a1.account_id=1 or a2.account_id=1 or a3.account_id=1 or a4.account_id=1;
4

2 回答 2

1

在我看来,同一个 acc 表上有这么多左外连接可能是导致性能问题的原因。

我建议弄清楚你的意图,然后尝试消除同一张桌子上的这么多左连接。

对于一般分析,我认为@ScottMarlowe 是对的,您需要提供更多信息,例如索引、解释结果等...

于 2013-02-22T07:01:25.143 回答
0

我不是专家,但从我的角度来看,您可以使用“exists”命令而不是使用“左连接”。

我尝试使用如下所示的“存在”命令编写您的查询:

select 
     distinct o1.id as c1, 
              a1.id as c2,
              o1.t1_id as c3, 
              o1.t2_id as c4,
              o1.t_p_id as c5 
from ord o1 
        where exists (select 1 
                        from acc a1 where o1.end_user_id=a1.id and a1.account_id=1)
        or exists (select 1 
                        from acc a2 where o1.end_user_id=a2.id and a2.account_id=1)  
        or exists (select 1 
                        from acc a3 where o1.end_user_id=a3.id and a3.account_id=1)  
        or exists (select 1 
                        from acc a4 where o1.end_user_id=a4.id and a4.account_id=1);

我希望它有所帮助。

于 2013-05-23T13:26:17.157 回答