Sql查询花了很长时间与内部联接

时间:2013-08-07 06:09:48

标签: mysql sql

我应该编写一个需要连接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;

此查询中是否存在w.r.t性能问题?

3 个答案:

答案 0 :(得分: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 ON (n.NodeNumber=v.orinodenumber )
INNER JOIN RAW_TBL r ON (r.RouterIP=n.ifipaddress   and v.oriIfIndex=r.OriIfIndex)

答案 1 :(得分: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;

答案 2 :(得分:1)

联接顺序有点奇怪。我不使用mysql所以也许它只是一些独特的加入方式,但通常你加入如下:

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

由于您以这种方式使用INNER JOIN,因此首先使用b连接过滤掉a,然后使用剩余的连接进行过滤,从而节省了大量的比较操作。想象一下,每张表都有一千行。当你添加c时,这就变成了100万次比较。与我的例子同时,它只会是1000 + 1000比较而不是1000 * 1000。

相关问题