SQL语句 Sum 效率的问题(有100万条数据)
语句如下,应如何优化以获得更高的执行效率
谢谢select sum(CJRec_Sub_Receive_SL) AS RSL from CJRec_Sub where CJRec_Sub_WL_BM like '30041'
  and CJRec_Sub_CBZX_R like 'C11902'
   and CJRec_Sub_IS_OK=1 and CJRec_Sub_Type like 'I'
    and (CJRec_Sub_Month between '2009-11-1 0:00:01' and '2009-11-10 23:59:59')

解决方案 »

  1.   

    好像原来剪刀哥有说过like 和charindex 的效率问题
      

  2.   

    像你这个like 后面, '30041'    'I'没加%,用了等于没用啊
      

  3.   

    select 
            sum(CJRec_Sub_Receive_SL) AS RSL 
    from 
          CJRec_Sub 
    where 
      CJRec_Sub_WL_BM ='30041' 
      and CJRec_Sub_CBZX_R ='C11902' 
      and CJRec_Sub_IS_OK=1 
      and CJRec_Sub_Type ='I' 
      and CJRec_Sub_Month >='2009-11-1' AND CJRec_Sub_Month<'2009-11-11'
    在各条件上加索引
      

  4.   

    如果那LIKE没有%转成=如果有是后面有'GFS%'请加索引,如果两者有那加索引也没用
      

  5.   

    select sum(CJRec_Sub_Receive_SL) AS RSL 
    from CJRec_Sub 
    where charindex('30041',CJRec_Sub_WL_BM)>0
      and  charindex('C11902',CJRec_Sub_CBZX_R)>0
      and CJRec_Sub_IS_OK=1 
      and charindex('I',CJRec_Sub_Type)>0 
      and 
      CJRec_Sub_Month between '2009-11-1 0:00:01' and '2009-11-10 23:59:59'
      

  6.   

    CHARINDEX是函数,如果有索引还是会失效,呵呵,如果楼主真的用LIKE 
    请参见全文索引,
      

  7.   

    select
     sum(CJRec_Sub_Receive_SL) AS RSL 
    from
     CJRec_Sub where CJRec_Sub_WL_BM like '30041' 
    and
     CJRec_Sub_CBZX_R like 'C11902' 
    and
     CJRec_Sub_IS_OK=1 and CJRec_Sub_Type like 'I' 
    and
     (CJRec_Sub_Month between '2009-11-1 0:00:01' and '2009-11-10 23:59:59')
    --------CJRec_Sub_WL_BM 、CJRec_Sub_CBZX_R、CJRec_Sub_IS_OK、CJRec_Sub_Type 字段 都可以根据需求加索引
      

  8.   

    如果是like '30041%'可以加索引  like '%30041'索引有可能失效一般来说索引都是加在连接字段具体的楼主自己去参考下索引的使用
      

  9.   

    like里无通配符,和等号一样。
      

  10.   

    学习 优化大师
    这个要在你查询的where后面的查询条件上加上索引应该会好些
      

  11.   

    100万应该是主表吧,
     CJRec_Sub_Month between '2009-11-1 0:00:01' and '2009-11-10 23:59:59' 
    这个条件段内的数据不会是100万吧。如果这样的话1秒以内不会有问题。
      

  12.   

    所以说语句上没什么可优话的地方,如果date是聚集索引,就很好办了。
      

  13.   

    哈哈,用like的话,有索引也是无效的,好好看看你的条件,把结果集最小的条件放在前面,由于没有数据,所以不知道你的条件中那个是限制性最强的,。
      

  14.   

    select sum(CJRec_Sub_Receive_SL) AS RSL from   CJRec_Sub where 
      CJRec_Sub_WL_BM ='30041' 
      and CJRec_Sub_CBZX_R ='C11902' 
      and CJRec_Sub_IS_OK=1 
      and CJRec_Sub_Type ='I' 
      and CJRec_Sub_Month between '2009-11-1' AND '2009-11-11'
      
    再加上一定的索引,会提高一写的速度