0

Loop1 は、いくつかの簡単なロジックによって導出されます。Loop2 は、非常に複雑なロジックによって導出されます。Loop3は非常に単純で、Loop2に2を追加するだけで導出されます

ここで、Loop1、Loop2、Loop3 を組み合わせて Loop4 を導き出します。問題は、ループ 2 が非常に重いロジックであり、ループ 3 内でロジックを再度導出すると、クエリの実行が非常に遅くなることです。より明確にするために、loop1&2 を使用して loop3 を見つけ、loop1,2&3 を使用して loop4 を見つけています。このクエリを機能させる方法を提案してください。

select sre.shipmentId, 
       loop1.TRY1, 
       loop2.TRY2, 
       loop3.TRY3, 
       (select case when u>0 then loop1.TRY1 when u>1 then loop2.TRY2 else loop3.TRY3 end) as loop4
from `shipmentRouteEvent` sre
left join (select sre1.shipmentId as s1, (case when .....>0 then .... end) ad TRY1
           from `shipmentRouteEvent` sre1
           where sre1.updateDate='2013-07-01'
          ) as loop1 on sre.id=try1.id
left join (select some heavy logic which will modify TRY1 to TRY2) as loop2
left join (select (TRY2+2) as TRY3) as loop3
where sre.updateDate='2013-07-01'
4

1 に答える 1

0

ネストされたサブクエリとしてこれを行いたいと思います:

from (select . . .
      fro (select . . .
           from `shipmentRouteEvent` sre left join
                 (select sre1.shipmentId as s1, (case when .....>0 then .... end) ad TRY1
                  from `shipmentRouteEvent` sre1
                  where sre1.updateDate='2013-07-01'
                ) loop1
                on sre.id=try1.id
           ) loop1 left join
           (select some heavy logic which will modify TRY1 to TRY2
           ) loop2
           on . . .
      ) loop2 left outer join
      (. . .
      ) loop3
      on . . .

ネストの各レベルでは、次のレベルで結果を使用できるため、結果を再計算する必要はありません。

于 2013-07-22T01:20:53.280 に答える