sqlserver查询补全时间_sqlserver 查询: Timeout 时间已到。在操作完成之前超时时间已过或服务器未响应。...

一个查询语句:SELECT   a.Id ,

a.Bid ,

a.RequestCode,

l.RequestTime,

l.CreateTime

INTO     #tmpQDBFlow

FROM     lending.QDBFlow a WITH ( NOLOCK )

LEFT JOIN lending.Lending l WITH(NOLOCK) ON l.Bid=a.Bid

WHERE    a.Step = 3

AND a.IsDisable = 1;

SELECT   a.Bid

FROM     #tmpQDBFlow a WITH ( NOLOCK )

LEFT JOIN lending.QDBRequestLog r WITH ( NOLOCK ) ON a.Id = r.FlowId

AND a.RequestCode = r.RequestCode

WHERE    CAST(r.ResponseData AS VARCHAR(100)) = ''

ORDER BY a.Bid;

DROP TABLE #tmpQDBFlow;

ResponseData 是 Text 数据类型,要取出来判断是否为空,还得转成 varchar,消耗性能:

在程序中使用报超时错误:

可以通过设置 SqlCommand 的TimeOut 值大点来防止超时:

SqlCommand cmd = new SqlCommand();

cmd.CommandTimeout = 180;

但是并不能从根本上解决问题,还得从 sql 语句本身去优化。

改成如下,速度瞬间变快:SELECT   a.Id ,

a.Bid ,

a.RequestCode,

l.RequestTime,

l.CreateTime

INTO     #tmpQDBFlow

FROM     lending.QDBFlow a WITH ( NOLOCK )

LEFT JOIN lending.Lending l WITH(NOLOCK) ON l.Bid=a.Bid

WHERE    a.Step = 3

AND a.IsDisable = 1;

SELECT   a.Bid,r.ResponseData

INTO #tmpSltBids

FROM     #tmpQDBFlow a WITH ( NOLOCK )

LEFT JOIN lending.QDBRequestLog r WITH ( NOLOCK ) ON a.Id = r.FlowId

AND a.RequestCode = r.RequestCode

SELECT Bid FROM #tmpSltBids

WHERE    CAST(ResponseData AS VARCHAR(100)) = ''

ORDER BY Bid;

DROP TABLE #tmpQDBFlow;

DROP TABLE #tmpSltBids;

具体不多解释。

将查询结果放到一个临时表中,再去连接查询这个临时表是一个很不错的优化方式。

refer:https://www.cnblogs.com/nx520zj/articles/6089935.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值