Foxtable(狐表)用户栏目专家坐堂 → ROW_NUMBER排序后作为子查询再分页出现超时


  共有4061人关注过本帖树形打印复制链接

主题:ROW_NUMBER排序后作为子查询再分页出现超时

帅哥哟,离线,有人找我吗?
happyft
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1938 积分:17793 威望:0 精华:0 注册:2014/7/29 19:09:00
ROW_NUMBER排序后作为子查询再分页出现超时  发帖心情 Post By:2020/12/15 11:50:00 [显示全部帖子]

如下面的sql语句:
SELECT  *
FROM    ( SELECT    ROW_NUMBER() OVER ( ORDER BY 生产单号 DESC ) AS RowNum ,
                    *
          FROM      uv_sc115
          WHERE     下单日期 >= '2020-01-01'
                    AND ( 生产单号 LIKE '%55外%'
                          OR CONVERT(NVARCHAR, 下单日期, 120) LIKE '%55外%'
                          OR 产品编码 LIKE '%55外%'
                          OR 品名 LIKE '%55外%'
                          OR 规格 LIKE '%55外%'
                        )
        ) AS tb
WHERE   RowNum >= 1
        AND RowNum <= 1000;

红色的语句执行只要1秒,查出有32条记录,但在外面加上分页查询后却出现查询超时,一直显示不出来,
因为这是用在项目上通用的一种查询结构,多数查询都没问题,但有个别象上面看似很简单的查询却有问题,会是什么原因呢?

谢谢!

 回到顶部
帅哥哟,离线,有人找我吗?
HappyFt
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1938 积分:17793 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2020/12/15 14:42:00 [显示全部帖子]

没有锁表的情况,如果先将了子查询保存在一个临时表中,如下
IF OBJECT_ID('tempdb..#temp1') IS NOT NULL
    DROP TABLE #temp1;      
SELECT  a.*
INTO    #temp1
FROM    ( SELECT    ROW_NUMBER() OVER ( ORDER BY 生产单号 DESC ) AS RowNum ,
                    *
          FROM      uv_sc115
          WHERE     下单日期 >= '2020-01-01'
                    AND ( 生产单号 LIKE '%55外%'
                          OR CONVERT(NVARCHAR, 下单日期, 120) LIKE '%55外%'
                          OR 产品编码 LIKE '%55外%'
                          OR 品名 LIKE '%55外%'
                          OR 规格 LIKE '%55外%'
                        )
        ) a;
SELECT  *
FROM    #temp1
WHERE   RowNum >= 1
        AND RowNum <= 1000;

这样速度就很快了,但是这样只能改用储存过程 ,原来的整个结构就改掉了,不知道为何原来那个查询会慢



 回到顶部