Sql 链接服务器上的Update语句花费的时间太长
我面临着一种奇怪的情况。我有以下Sql 链接服务器上的Update语句花费的时间太长,sql,sql-server,azure,Sql,Sql Server,Azure,我面临着一种奇怪的情况。我有以下update语句,要对Azure中的链接服务器执行该语句,所需时间太长,几乎是30秒,而一个月前几乎是瞬间: UPDATE es SET es.ADFLAG3=1 FROM MYLINKEDSERVER.IMPERIALDB.DBO.ESFIDOCUMENTTRADE es JOIN #WMS_CVR_ORDERCONFIRMAT WMSC on es.gid=WMSC.FDOCUMENTGID 我如何优化它?有什么不对劲吗?谢谢 编辑 执行计划内的远程扫描为1
update
语句,要对Azure中的链接服务器执行该语句,所需时间太长,几乎是30秒,而一个月前几乎是瞬间:
UPDATE es
SET es.ADFLAG3=1
FROM MYLINKEDSERVER.IMPERIALDB.DBO.ESFIDOCUMENTTRADE es
JOIN #WMS_CVR_ORDERCONFIRMAT WMSC on es.gid=WMSC.FDOCUMENTGID
我如何优化它?有什么不对劲吗?谢谢
编辑
执行计划内的远程扫描为100%…可能有多行与第二个表匹配。如果是这样,
存在
可能有助于:
UPDATE es
SET es.ADFLAG3 = 1
FROM MYLINKEDSERVER.IMPERIALDB.DBO.ESFIDOCUMENTTRADE
WHERE EXISTS (SELECT 1
FROM #WMS_CVR_ORDERCONFIRMAT WMSC
WHERE es.gid = WMSC.FDOCUMENTGID
);
在这两种情况下,您都需要在
#WMS\u CVR\u orderconfirm(FDOCUMENTGID)
上创建索引,现在创建索引需要30秒以上的时间。肯定还有别的事情不对。我不知道是什么。你试过exists语法了吗?你的意思是什么?也许一个月前数据很少,现在有很多。链接服务器通常是一个坏消息idea@Nick.McDermaid-数据量相同,首先使用LS是逻辑。如果不创建本地实例,然后创建一个LS,那么如何访问Azure中托管的DB?在\WMS\u CVR\u orderconfirm
中有多少记录?ESFIDOCUMENTTRADE
中有多少?#WMS\u CVR\u订单确认
多久更改一次?此查询需要多长时间运行一次?#WMS\u CVR\u orderconfirm
中是否有任何日期更改指示器?您是否能够在本地SQL Server上启用CDC?