tabA
filed1 filed2 filed3 filed4   
f1Va null null f4Va
f1Va null f3Vb null   
f1Va f3Vc null null需求:
1、找出filed1内容相同
2、将任意一行null的字段,填上其他行,同列的非null的字段
3、保留填充完整的行,删除其他提供数据的行
上述数据希望返回:
filed1 filed2 filed3 filed4   
f1Va f3Vc f3Vb f4Va解释:
第一步:找到filed1相同的内容,有三条
f1Va null null f4Va
f1Va null f3Vb null   
f1Va f3Vc null null第二步:
第一条记录的filed2字段为null,找到第三条记录的filed2字段非空,然后用该字段填充第一行中filed2字段
第一条记录的filed3字段为null,找到第二条记录的filed2字段非空,然后用该字段填充第一行中filed3字段
第一条记录的filed4字段非null,不处理第三步:
删除第二条记录和第三条记录,保留第一条记录。
我采用大家提供的方法:select f1, max(f2), max(f3), max(f4) from tabA group by f1;然后100w的数据量,执行了6个小时还没出结果,就放弃了,不知道是为什么?是否需要建立索引或者其他优化?不知道现在该怎么办?

解决方案 »

  1.   

    内存多大,表多大,什么类型?myisam?结果多大,sort_buffer_size多大?查询 线程是否沾满某一核的cpu?试着增大 sort_buffer_size
      

  2.   

    EXPLAIN SQL语句,看看结果
    在F1上建立索引没有
      

  3.   

    http://i.imgur.com/lVwdl.pngEXPLAIN SQL的结果啊
      

  4.   

    SHOW INDEX FROM tbl_name 
      

  5.   


    1,看到了有using filesort这样的描述,那么可能是排序缓存不够了,sort_buffer_size参数设置大点试试看。2,大数据量操作,一定会用到参数tmp_table_size,你试试把这个参数调整大。一般8G的内层可以设置为1024M。