有两表T1,T2。
T1约9000条数据,有以下列:
id,eid,name
T2约50000条数据,有以下列:
id,eid,num
现要查出T1表中eid在T2表中同一个eid的num合计,其中求合计后的数据总数sql如下,耗时5秒,求优化:
SELECT COUNT(*) FROM(
SELECT T1.id,T1.eid,T1.name, t.num FROM T1
LEFT JOIN (SELECT eid, COUNT(*) AS num FROM T2 GROUP BY eid) t ON t.eid = T1.eid
WHERE t.num > 0
) t
必须这样写啊,弟弟
SELECT count(*) FROM T1
INNER JOIN (SELECT eid, COUNT(*) AS num FROM T2 GROUP BY eid HAVING COUNT(*)>0) t ON t.eid = T1.eid
没有比较用嵌套查询啊 分组可以放到where后面
SELECT COUNT(t.*) FROM t1 t LEFT JOIN t2 t2 ON t.eid = t2.eid WHERE t2.num >0 GROUP BY t2.eid
你用这条sql执行下试试
SELECT COUNT(t.*) FROM t1 t LEFT JOIN t2 t2 ON t.eid = t2.eid WHERE t2.num >0 GROUP BY t2.eid
这样写效果更慢,要1分多钟
最后查到有个查询字段是varchar(2000)太长,联表查询使用的是ALL类型,要返回全部结果,所以很慢。解决办法:二次查询,这个字段另外单独查