1

3 つのテーブルを結合する必要があるクエリを作成することになっています。私が設計したクエリは問題なく動作しますが、実行に時間がかかります。

SELECT v.LinkID,  r.SourcePort, r.DestPort, r.NoOfBytes, r.StartTime , r.EndTime, r.Direction, r.nFlows
FROM LINK_TBL v 
INNER JOIN NODEIF_TBL n 
INNER JOIN RAW_TBL r ON 
    r.RouterIP=n.ifipaddress 
    and n.NodeNumber=v.orinodenumber 
    and v.oriIfIndex=r.OriIfIndex;

このクエリでパフォーマンスに関する問題はありますか?

4

3 に答える 3

4

これを試して、結合に条件を入れてください

SELECT v.LinkID,  r.SourcePort, r.DestPort, r.NoOfBytes, r.StartTime , r.EndTime, r.Direction, r.nFlows
FROM LINK_TBL v 
INNER JOIN NODEIF_TBL n ON (n.NodeNumber=v.orinodenumber )
INNER JOIN RAW_TBL r ON (r.RouterIP=n.ifipaddress   and v.oriIfIndex=r.OriIfIndex)
于 2013-08-07T06:16:26.473 に答える
2

これを試して:

SELECT v.LinkID,  r.SourcePort, r.DestPort, r.NoOfBytes, r.StartTime , r.EndTime, r.Direction, r.nFlows
FROM LINK_TBL v 
INNER JOIN NODEIF_TBL n ON
    n.NodeNumber=v.orinodenumber 
INNER JOIN RAW_TBL r ON 
    r.RouterIP=n.ifipaddress 
and v.oriIfIndex=r.OriIfIndex;
于 2013-08-07T06:15:26.530 に答える
1

参加順序はやや奇妙です。私は mysql を扱っていないので、参加するためのユニークな方法かもしれませんが、通常は次のように参加します。

FROM 
    a
    INNER JOIN b ON a.id1 = b.id2
    INNER JOIN c ON b.id3 = c.id4

このように INNER JOIN を使用しているため、最初に a を b 結合で除外し、次に残りの結合を使用して除外し、多くの比較アクションを節約します。各テーブルに 1,000 行あるとします。c を追加すると、これは 100 万回の比較になります。一方、私の例では、1000 * 1000 ではなく、1000 + 1000 の比較のみになります。

于 2013-08-07T06:16:47.397 に答える