各位前辈,我的SQL语句如下(Oracle中):SELECT max(formno),qisdapn, REPLACE (makercode, ';', '') AS makercode, makername,
weight 
FROM makerpn
group by qisdapn,makercode,makername,weight因为数据有几十万笔,所以查起来耗时太长。
请问各位大侠,有没有可以优化的SQL以缩短查询的时间,谢谢。

解决方案 »

  1.   

    SELECT max(formno),qisdapn, REPLACE (makercode, ';', '') AS makercode, makername,
    weight  
    FROM makerpn
    group by qisdapn,makercode,makername,weight
    这个语句很简洁了 几十万数据就很慢?执行用多长时间?
      

  2.   

    全表扫描建索引没有任何意义;
    如果楼主的主机是多 cpu 的,建议采用并行查询会快很多,添加红色标示关键字就可以SELECT /*+parallel(a,5) */max(formno),
     qisdapn,
     REPLACE(makercode, ';', '') AS makercode,
     makername,
     weight
    FROM makerpn a
     group by qisdapn, makercode, makername, weight
      

  3.   


    --试试
    select formno,qisdapn, makercode, makername
    (SELECT formno,qisdapn, REPLACE (makercode, ';', '') AS makercode, makername,
    row_number() over(partition by qisdapn,makercode,makername,weight order by formno desc) rn
    weight  
    FROM makerpn)
    where rn=1