1.是不是可以减少一下查询的数据量,
2.是不是可以不对b.F_senddate进行运算
比如:select id from table1 where id*2>4 写成select id from table1 where id>2

解决方案 »

  1.   

    在查询分析器中运行这个SQL的效率如何?select 
        3,
        sum(isnull(b.f_gpadd1,0)),sum(isnull(b.f_gpadd2,0)),sum(isnull(b.f_gpadd3,0)),
        sum(isnull(b.f_gpadd4,0)),sum(isnull(b.f_gpadd5,0)),sum(isnull(b.f_gpadd6,0)),
        sum(isnull(b.f_gpadd7,0)),sum(isnull(-b.f_gpadd8,0)) 
    from 
        t_books b 
    where 
        (b.F_flag = 2) 
        and 
        (isnull(b.F_senddate,'3000-08-14')>=@fromDate and isnull(b.F_senddate,'3000-08-14')<=@toDate)
      

  2.   

    1. sum 函数自己会去除 null 空值的,所以 sum函数中的isnull 无用,此处多了 8 * 40 次运算2. where 语句中 F_senddate 的判断
    (isnull(b.F_senddate,'3000-08-14')>=@fromDate and isnull(b.F_senddate,'3000-08-14')<=@toDate)
    a.如果 F_senddate  不为空,那么 也就是 F_senddate  between @fromDate and @toDate
    b.如果 F_senddate 为null 值,那么 
    (isnull(b.F_senddate,'3000-08-14')>=@fromDate and isnull(b.F_senddate,'3000-08-14')<=@toDate)  
    为 '3000-08-14' >= @fromDate  and '3000-08-14' <= @toDate ,此处有什么意义,按照现在的时间来看,此处2个条件明显为假,其实楼主的目的无非就是出去掉 b.F_senddate 为null的数据
    总结
    select 3,sum(b.f_gpadd1,),sum(b.f_gpadd2),sum(b.f_gpadd3),sum(b.f_gpadd4)
           ,sum(b.f_gpadd5),sum(b.f_gpadd6),sum(b.f_gpadd7),sum(b.f_gpadd8) 
    from t_books b  
    where b.F_flag = 2
    and b.F_senddate between @fromDate and @toDate
      

  3.   

    在查询分析器中运行这个SQL的执行的时间需要20左右
    用一下的语句
    select 3,sum(b.f_gpadd1,),sum(b.f_gpadd2),sum(b.f_gpadd3),sum(b.f_gpadd4)
           ,sum(b.f_gpadd5),sum(b.f_gpadd6),sum(b.f_gpadd7),sum(b.f_gpadd8) 
    from t_books b  
    where b.F_flag = 2
    and b.F_senddate between @fromDate and @toDate
    执行需要15秒左右
    但是我这个存储过程,在程序中运行,执行到这里,还是都提示执行超时,数据连接失败!!!
      

  4.   

    在t_books.F_senddate这个栏位上创建聚集索引.