zoukankan      html  css  js  c++  java
  • SQL联查语句加上order排序之后速度超级慢

    项目中使用到了分页查询,形式如下

    1 select * from
    2 (
    3     select row_number() over (order by a.id0) as seq,a.* from
    4     PMS_T_D_StakeCoordinate a
    5     left join ZY_T_D_Route b on a.route_code=b.route_code    
    6 ) as T
    7 where seq between 1 and 1000

    本来分页查询应该是很快的,但是随着项目的进展,数据量逐步增加到了百万级,此查询直接报错“服务器连接超时”

    于是将SQL考到SqlServer里面执行,发现需要2分多钟才能出结果

    去掉“row_number() over (order by id0) as seq”之后时间减少到了15秒,这个差距太大了。。。

    于是猜测是order by 的问题,在查询后面加上order by id0,查询时间又飙到了2分钟,果然如此

    于是,寻求加自增长编号的方法替代order by

    select IDENTITY(INT,1,1) as orderID,* 
     into #ttemp
    from
     
    (
     
       table...
     
    ) where seq between pageBegin and pageEnd
    
    select * from #ttemp

    但是这里也有个问题,通过自增IDENTITY(INT,1,1)得到的orderID不是按顺序排列的,这个地方没搞清楚,求解求指点??????

    不得已,在select * from #ttemp后面再order by一次,如下

    select * from #ttemp  order by orderID

    这个担心用order by又会导致查询时间飙升,但结果也只花了16秒,nice!

    如此看来,order by对单表影响不大,可能是因为我的查询中有太多的联查???

  • 相关阅读:
    在类中声明常量
    PHPStudy配置虚拟主机配置域名步骤
    PHPStudy配置虚拟主机步骤
    2019年7月22日星期一,简单的总结一下
    简单的面向对象
    session和cookie
    Jquery 事件绑定 bind 与on 的区别
    php try catch用法
    include,include_once,require,require_once的区别
    require与 include区别
  • 原文地址:https://www.cnblogs.com/lyd2016/p/7093305.html
Copyright © 2011-2022 走看看