解决方案 »

  1.   

    SQL 如下,用那种方式命名索引的方式更有效, 其更有效的原理是什么呢
    SELECT sga51 日期 ,
            SUM(sga91) 生产数量 ,
            SUM(b.gb92) 厂内不良数量 ,
            SUM(b.gb94) 厂外不良数量 ,
            CONVERT(DECIMAL(18, 4), SUM(b.gb92) * 1.00 / ( SUM(sga91) * 1.00 )
            * 100) 厂内不良率百分比 ,
            CONVERT(DECIMAL(18, 4), SUM(b.gb94) * 1.00 / ( SUM(sga91) * 1.00 )
            * 100) 厂外不良率百分比 ,
            CONVERT(DECIMAL(18, 4), SUM(b.gb92 + b.gb94) * 1.00 / ( SUM(sga91)* 1.00 ) * 100) 总不良率
     FROM   Qcountsum a
            LEFT JOIN ( SELECT  gb91 ,
                                SUM(gb92) gb92 ,
                                SUM(gb94) gb94
                        FROM    Qcountb
                        WHERE   gb51 BETWEEN '2014-11-01' AND '2014-11-20'
                        GROUP BY gb91
                      ) b ON a.SID = b.gb91
     WHERE  a.sga91 > 0
            AND a.sga51 BETWEEN '2014-11-01' AND '2014-11-20'
     GROUP BY sga51
     ORDER BY sga51
      

  2.   

    分开与否也要基于数据的存取特性,如果你的where条件仅用到第一个索引的第一列,不分开也是可以的,特定情况下可能更好
      

  3.   


    要看语句的条件而定有(select+where+on+group by +order by),索引大小决定性能如果同时查询两列作为条件时,那用复合索引(2列建一个索引)。如果(两列)分开查时作为条件时可分开.