-1

以下は、91000を超えるレコードを含むテーブルに対してnavicat my sqlで実行している私のクエリです。

select l.* 
from localcdrsmem l 
LEFT JOIN (
         SELECT LocalCDRID, ForeignCDRsID 
         from localcdrsmem l 
         INNER JOIN foreigncdrsmem f 
         ON l.CalledNumber=f.CalledNumber and 
         ABS(l.Duration-f.Duration)<= 2 and            
         ABS(TIMESTAMPDIFF(SECOND,f.StartTime,l.StartTime))<=100 
         group by l.CalledNumber) 
as temp ON l.LocalCDRID = temp.LocalCDRID 
where temp.LocalCDRID IS NULL;

テーブルは次のとおりです。

localcdrsmem - > 
+---------+------------+--------+----------
localcdrid | callednumber | duration | starttime
+---------+------------+--------+----------+
foreigncdrsmem- > 
+------------+------------+--------+----------
foreigncdrid | callednumber | duration | starttime
+---------+------------+--------+----------+

このクエリを最適化するためのアイデアはありますか??

4

1 に答える 1

-1
select l.* from localcdrsmem l LEFT JOIN 
(SELECT LocalCDRID, ForeignCDRsID from localcdrsmem l 
INNER JOIN foreigncdrsmem f
ON l.CalledNumber=f.CalledNumber 
WHERE ABS(l.Duration-f.Duration)<= 2 
and ABS(TIMESTAMPDIFF(SECOND,f.StartTime,l.StartTime))<=100 
group by l.CalledNumber) as temp
ON l.LocalCDRID = temp.LocalCDRID where temp.LocalCDRID IS NULL;

上記のクエリを試してください。このクエリはより高速に実行されます。このステートメントの後に句を付けてandステートメントを変更するだけです。クエリの違いがわかります。whereON l.CalledNumber=f.CalledNumber

于 2013-09-09T08:16:05.657 に答える