我有此查询在此线程中的讨论输出是什么:Mysql JOIN子查询
请参阅当前的提琴:http ://sqlfiddle.com/#!2/ e97cf/22
create table c_contact
(id INT,
name VARCHAR(20),
securityid INT
);
create table c_monitoring
(started DATE,
ended DATE DEFAULT NULL,
securityid INT
);
SELECT
c_contact.id,
c_contact.name,
c_contact.securityid
FROM c_contact
WHERE c_contact.securityid != ''
AND c_contact.securityid NOT IN
(select securityid
from c_monitoring
where ended is null
group by securityid
)
GROUP BY c_contact.id ;
我将如何优化此查询?我在c_contact表中有100.000条记录,在c_monitoring表中有10.000条记录。查询耗时30秒,包含127条结果行。
编辑:案例已通过正确索引表解决。
您的查询存在一些分组问题(实际上,您不应有任何分组依据子句),应将其转换为联接:
SELECT
c.id,
c.name,
c.securityid
FROM c_contact c
LEFT JOIN c_monitoring m ON m.securityid = c.securityid
AND m.ended is null
WHERE c.securityid != ''
AND m.securityid IS NULL
我还使用别名对查询进行了一些整理。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句