【发布时间】:2013-09-09 07:07:32
【问题描述】:
以下是我的查询,我在 navicat my sql 中对包含超过 91000 条记录的表执行。
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
+---------+------------+--------+----------+
对优化这个查询有什么想法吗??
【问题讨论】:
-
我猜是在 join 子句中使用了数学和函数,但你能给我们
EXPLAIN的输出吗? -
与整个事情相比,内部查询需要多少时间?
-
我实际上想从第一个表 localcdrsmem 中获取那些不存在于通过子查询连接到它的表中的记录。
-
内部查询需要将近 1.481 秒来执行
-
这些不是表定义。添加
SHOW CREATE TABLE localcdrsmem;和SHOW CREATE TABLE foreigncdrsmem;的输出
标签: mysql sql performance query-optimization