select * from(
  select top 20 * from (
       select  moo.linkid,moo.mobile,moo.matchcode,mocontent,motime,moo.spcode,moo.stat,moo.state,moo.company,mt.linkid mtlinkid,mtcontent,mttime,mt.stat mtstat,RowNumber 
           from(
              select linkid,mobile,mo.matchcode,mocontent,motime,spcode,stat,Province state,company,ROW_NUMBER() OVER (ORDER BY id) AS RowNumber 
                from t_jbxs_mo_log mo,t_mobile_zipcode mobi,t_jbxs_matchinfo matc 
                   where substring(mo.mobile,0,8)=substring(mobi.Region,0,8) and matc.matchcode=mo.matchcode      ) moo left join t_jbxs_mt_log mt on mt.linkid=moo.linkid
   ) result where RowNumber>(100-1)*20 ) resultOrder  order by motime desc这是我的sql语句,在查询分析器中一般都是2秒左右,在系统中有时候很快,有时候却很慢超时查不出数据来。不知道是怎么回事

解决方案 »

  1.   

    多写了两层没用的. 改为以下select top 20 moo.linkid,moo.mobile,moo.matchcode,mocontent,motime,moo.spcode,moo.stat,moo.state,moo.company,mt.linkid mtlinkid,mtcontent,mttime,mt.stat mtstat,RowNumber  
      from(
      select linkid,mobile,mo.matchcode,mocontent,motime,spcode,stat,Province state,company,ROW_NUMBER() OVER (ORDER BY id) AS RowNumber  
      from t_jbxs_mo_log mo,t_mobile_zipcode mobi,t_jbxs_matchinfo matc  
      where substring(mo.mobile,0,8)=substring(mobi.Region,0,8) and matc.matchcode=mo.matchcode    ) moo left join t_jbxs_mt_log mt on mt.linkid=moo.linkid where RowNumber>(100-1)*20 ) resultOrder order by motime desc
      

  2.   


    select * from(
      select top 20 * from (
    你这两层没法去重复呀..
      

  3.   

    ROW_NUMBER() OVER (ORDER BY id) AS RowNumber 这个是我自动编的号,我放在最外面判断的,放到里面每次取的都是一样的所以会重复,你的sql语句我刚试过了,确实重复
      

  4.   

    把你的这个sql语句写入存储过程吧。不要拼接sql在cs上。
      

  5.   

    如果是我,我就让sql语句执行尽可能简单的功能,
    把判断啥的放在程序里去执行,要不然总是这样,数据库受不了啊
      

  6.   

    如果查询分析器的时间稳定在2秒左右,说明数据库端没有问题,sql 语句没有问题,问题出在其他地方,比如网络连接?
      

  7.   

    你应该去SQL版优化一下 。。
      

  8.   

    使用SQL SERVER性能监视器,计算从该条sql传入sql到返回值后的时间
    也可以发现时间究竟是花在执行上,还是其他方面
      

  9.   

    的确
    联表查条件还是substring(mo.mobile,0,8)=substring(mobi.Region,0,8)
      

  10.   

    打个SP_WHO  ,看看你用的几张表是不是被其他进程锁了,锁了就会很慢建议用临时表。表名后加上 with (nolock)
      

  11.   

    看了你的SQL语句,我意识到我的sql也很菜...
      

  12.   

    建议用临时表。表名后加上 with (nolock)
      

  13.   

    我也寫過自動增號的sql,用生成視圖的方法速度還可以,試一下吧
      

  14.   

    用存储过程试试吧  或者你把后面from的语句写成left join 语句 调用下?
      

  15.   

    SELECT  *
    FROM
            (SELECT top 20 *
            FROM
                    (SELECT moo.linkid        ,
                            moo.mobile        ,
                            moo.matchcode     ,
                            mocontent         ,
                            motime            ,
                            moo.spcode        ,
                            moo.stat          ,
                            moo.state         ,
                            moo.company       ,
                            mt.linkid mtlinkid,
                            mtcontent         ,
                            mttime            ,
                            mt.stat mtstat    ,
                            RowNumber
                    FROM
                            (SELECT linkid        ,
                                    mobile        ,
                                    mo.matchcode  ,
                                    mocontent     ,
                                    motime        ,
                                    spcode        ,
                                    stat          ,
                                    Province state,
                                    company       ,
                                    ROW_NUMBER() OVER (ORDER BY id) AS RowNumber
                            FROM    t_jbxs_mo_log mo     ,
                                    t_mobile_zipcode mobi,
                                    t_jbxs_matchinfo matc
                            WHERE   substring(mo.mobile,0,8)=substring(mobi.Region,0,8)
                                AND matc.matchcode          =mo.matchcode
                            ) moo
                            LEFT JOIN t_jbxs_mt_log mt
                            ON      mt.linkid=moo.linkid
                    ) result
            WHERE   RowNumber>(100-1)*20
            ) resultOrder
    ORDER BY motime DESC帮楼主排了下版
      

  16.   

    RowNumber>(100-1)*20
    这个是固定的值么,如果是最好大于该值,不要用表达式在计算该值。
      

  17.   

    在系统中很慢,但在查询分析器中很快,这个可以参考一下:
    http://www.cnblogs.com/bluedoctor/archive/2011/03/04/1970866.html