Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用内部联接执行Sql查询需要很长时间_Mysql_Sql - Fatal编程技术网

Mysql 使用内部联接执行Sql查询需要很长时间

Mysql 使用内部联接执行Sql查询需要很长时间,mysql,sql,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

我应该写一个需要连接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性能问题?

请尝试以下操作:

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;
试试这个:

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;

试试这个,在连接中加入条件

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)

试试这个,在连接中加入条件

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)

连接顺序有点奇怪。我不使用mysql,所以可能这只是一种独特的加入方式,但通常你会这样加入:

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

由于您使用的是内部联接,因此首先使用b联接过滤掉a,然后才使用剩余联接过滤掉,从而节省了大量比较操作。假设每个表有1000行。当您添加c时,这将成为一百万次比较。同时,在我的示例中,只有1000+1000比较,而不是1000*1000。

连接顺序有点奇怪。我不使用mysql,所以可能这只是一种独特的加入方式,但通常你会这样加入:

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


由于您使用的是内部联接,因此首先使用b联接过滤掉a,然后才使用剩余联接过滤掉,从而节省了大量比较操作。假设每个表有1000行。当您添加c时,这将成为一百万次比较。同时,在我的示例中,只有1000+1000比较,而不是1000*1000。

对于
NODEIF\u TBL
@Phil,您没有任何连接条件。您好,我正在将NODEIF_TBL中的两列与其余表中的两列进行匹配,我认为这是在连接表,对吗?或者你是想传达别的什么。我不太擅长sql。请看下面的答案,它们都是正确的您没有任何连接条件来连接
NODEIF\u TBL
@Phil。您好,我正在将NODEIF_TBL中的两列与其余表中的两列进行匹配,我认为这是在连接表,对吗?或者你是想传达别的什么。我不太擅长sql。请看下面的答案,它们都是正确的。Hi Dianuj,o/p时间是50.25秒,而原始查询的结果是49.89秒。但我认为你的加入方式应该一直使用。谢谢你表中的列有正确的索引吗?没有。我从来没有做过索引。也许,我想这会有帮助。是的,你必须为你的专栏建立索引。看这里,是的,我会尝试建立索引。告诉我一件事。是否必须为所有表编制索引?另外,每次向表中插入新数据时,我是否需要进行索引?Hi Dianuj,o/p时间为50.25秒,而原始查询的时间为49.89秒。但我认为你的加入方式应该一直使用。谢谢你表中的列有正确的索引吗?没有。我从来没有做过索引。也许,我想这会有帮助。是的,你必须为你的专栏建立索引。看这里,是的,我会尝试建立索引。告诉我一件事。是否必须为所有表编制索引?另外,每次向表中插入新数据时,我是否需要进行索引?嗨,Sunil,您的查询有一个微小的改进。它是49.47秒对49.89秒。能再亮一点吗?另外,你能告诉我,在内部连接上,我直接写了一个where子句,比如T1.a=T2.b和T2.c=T3.d,那么会有什么不同吗?嗨,Sunil,你的查询有一点改进。它是49.47秒对49.89秒。能再亮一点吗?另外,你能告诉我,在内部连接上,我直接写了一个where子句,比如T1.a=T2.b和T2.c=T3.d,那么会有什么不同呢?谢谢你,你解释得很好。威尔,从今以后记住这一点。我还需要按照Dianuj的建议为我的表格编制索引。谢谢你,你解释得很好。威尔,从今以后记住这一点。我还需要按照Dianuj的建议为我的表编制索引。