SELECT pic_num FROM u_picture WHERE pro_id =1 AND pic_shot IN 
(SELECT pic_shot FROM u_picture where pic_reviewer =121 group by  pic_shot )
这句话执行竟然要50多秒
而去掉group by之后只需要0.03秒不到
  我用navicat查看之后,发现前者sending data用了50多秒
结果一样,为什么两者之间效率会差这么多,是in语句和group by之间的问题吗
(括号内的查询结果为83条)

解决方案 »

  1.   

    索引情况如何,pic_shot、pic_reviewer上建立索引没有?
      

  2.   

    select pic_num from u_picture 
    where pro_id=1 and pic_shot exists(SELECT pic_shot FROM u_picture where pic_reviewer =121);
      

  3.   

    我只是想找出 为什么要运行这么久的原因  
    为什么取消group by 就会变的这么快
      

  4.   

    估计这个SELECT pic_shot FROM u_picture where pic_reviewer =121的返回结果很多。 然后MYSQL需要额外的开销去处理GROUP BY, 比如你的结果返回 是 1,1,1,1,1,1,1,1,2,2,2,2,2,3,3 而MYSQL需要额外的步骤去处理为 1,2,3 如果这个记录很多,则MYSQL需要额外的磁盘操作进行外排序。
      

  5.   

    用in 每关联一次都要group by