本帖最后由 lazygc520 于 2014-01-07 10:20:20 编辑

解决方案 »

  1.   

    sql语句的主要意思是从rk_record中找到rkno=201401030031时对应的packageno字段的信息,再根据连表查询表sys_barcode_1d_y中对应的packageno字段的信息,再对查询的信息进行group by处理。这个语句不能优化么?
      

  2.   

    desc select a.id,rkno,a.packageno as packageno,cust_no,lotno,count(*) as count from `rk_record` as a right join `sys_barcode_1d_y` as b on a.packageno = b.packageno where rkno = '201401030031' group by packageno,lotno order by packageno,lotno asc
    贴出结果
      

  3.   

    explain下看看走哪些索引 应该走sys_barcode_1d_y的packageno和rk_record的rkno
      

  4.   


    1 SIMPLE b ALL \N \N \N \N 412671 Using temporary; Using filesort
    1 SIMPLE a ref rkno,packageno packageno 92 func 1 Using where
      

  5.   


    1 SIMPLE b ALL \N \N \N \N 412671 Using temporary; Using filesort
    1 SIMPLE a ref rkno,packageno packageno 92 func 1 Using where没走到索引 1 SIMPLE b ALL \N \N \N \N 412671 Using temporary; Using filesort
      

  6.   


    1 SIMPLE b ALL \N \N \N \N 412671 Using temporary; Using filesort
    1 SIMPLE a ref rkno,packageno packageno 92 func 1 Using where没走到索引 1 SIMPLE b ALL \N \N \N \N 412671 Using temporary; Using filesort
    是的,如何修改sql语句可以使其用到索引?
      

  7.   


    1 SIMPLE b ALL \N \N \N \N 412671 Using temporary; Using filesort
    1 SIMPLE a ref rkno,packageno packageno 92 func 1 Using where没走到索引 1 SIMPLE b ALL \N \N \N \N 412671 Using temporary; Using filesort
    是的,如何修改sql语句可以使其用到索引?
    select a.id,rkno,a.packageno as packageno,cust_no,lotno,count(*) as count 
    from `rk_record` as a 
    right join `sys_barcode_1d_y` as b 
    on a.packageno = b.packageno 
    where rkno = '201401030031'你先这样试试 , 不要分组与排序 , 看是什么效果?
      

  8.   

    你先这样试试 , 不要分组与排序 , 看是什么效果?
    desc select a.id,rkno,a.packageno as packageno,cust_no,lotno,count(*) as count 
    from `rk_record` as a 
    right join `sys_barcode_1d_y` as b 
    on a.packageno = b.packageno 
    where rkno = '201401030031'1 SIMPLE b ALL \N \N \N \N 412776
    1 SIMPLE a ref rkno,packageno packageno 92 func 1 Using where