SELECT   *  FROM     liuhuarecord lr
LEFT JOIN (SELECT  sum(xxx) FROM     cliprecord group by xxx) cr
ON cr.liuhuarecord_id = lr.idliuhuarecord 和 cliprecord 是一对多关系liuhuarecord 是一端
cliprecord 是多端
两个表的记录分别有3万条左右这个查询需要大概23秒 不知为何   请予神助

解决方案 »

  1.   

    两个表的记录分别有3万条左右? 
    1 对 多 ?这不是 1对1了么
    而且 SELECT sum(xxx) FROM cliprecord group by xxx 这一句有问题
      

  2.   

    SELECT * FROM liuhuarecord lr
    LEFT JOIN (SELECT sum(xxx) FROM cliprecord group by xxx) cr
    ON cr.liuhuarecord_id = lr.idcr里面根本不存在liuhuarecord_id,你这语句不出错的话就是做了笛卡儿乘积!
    用下面的试试看:
    SELECT * FROM liuhuarecord lr
    LEFT JOIN (SELECT liuhuarecord_id,sum(xxx) FROM cliprecord group by xxx) cr
    ON cr.liuhuarecord_id = lr.id
      

  3.   

    上面错了,group by XXX还要改成 group by liuhuarecord_id,就是你的那个对应的那个id
      

  4.   

    SQL里面内容太多 我精简了一些不好意思 
    SELECT sum(xxx) FROM cliprecord group by liuhuarecord_id 
    这样没问题了吧  但执行时间还是很长
      

  5.   

    SELECT * FROM liuhuarecord lr
    LEFT JOIN (SELECT liuhuarecord_id,sum(xxx) FROM cliprecord group by liuhuarecord_id) cr
    ON cr.liuhuarecord_id = lr.id
      

  6.   


    没错 这句就是做了笛卡尔乘积  实际上子查询中我也是写了liuhuarecord_id了的,并且是有索引的,还是慢
      

  7.   

    大家可以找一个一对多的表试一下假设A是一 ,B是多select * from a left join b on a.id=b.a_id和select * from a left join (select * from b) tp_b on a.id=tp_b.a_id
    结果虽然一样  但执行时间差十万八千里
      

  8.   

    SELECT sum(xxx) FROM cliprecord group by xxx 这一句有问题,我的观点是:SELECT lr.*,sum(cr.xxx) FROM liuhuarecord lr
    LEFT JOIN  cliprecord cr on lr.id = cr.liuhuarecord_id group by cr.liuhuarecord_id希望能帮到你
      

  9.   

    刚才的回答 将group by cr.liuhuarecord_id 改为 group by lr.id 会好一点。要不甸如果cliprecord 外键没有值的话结果可能不是楼主想要的
      

  10.   

    按我以前的做法都是把group by的结果自己建一张表扔进去 再执行整句的sql 效率确实差很多我也是做一个10万数据量的查询 当时直接执行的话3个小时都没有跑完 拆开来一句一句执行1个小时就OK了