我有一个存储过程,在执行它时会快速运行,或者突出显示脚本fta,它通常会运行或执行代码。
从1个表中选择前3个只需要一秒钟或1.5秒,这个表来自一个服务器并将其插入另一个表中,该表也在另一个服务器中。
但是当我尝试使用作业执行存储过程时,这样做需要一辈子的时间。我错过了什么吗?
USE [xxxx]
GO
/****** Object: StoredProcedure [dbo].[MARK_ACTIVE] Script Date: 4/20/2015 5:55:53 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[xxxx]
AS
SET ANSI_NULLS ON
INSERT INTO [123.456.7.890].[DBASE1].[dbo].[TABLE] (smsfr,smsmsg,smsdt,dbdt,devid,status,status2,IsHEX)
SELECT TOP 3 smsfr,smsmsg,smsdt,dbdt,devid,status,status2,IsHEX
FROM [098.765.4.321].[[DBASE2].[dbo].[TABLE2] cr
WHERE
NOT EXISTS (SELECT id,smsfr,smsmsg,smsdt,dbdt,devid,status,status2,IsHEX FROM [123.456.7.890].[DBASE1].[dbo].[TABLE] c
WHERE cr.smsdt = c.smsdt)
答案 0 :(得分:1)
理论上,从任何连接调用的相同存储过程应该以大致相同的速度运行,无论谁调用它。但是......有连接设置会导致创建不同的执行计划。如果您在SSMS中运行(可能是您自己的PC本地)和服务器上自动运行的内容之间的性能不同,我会检查两台计算机上的ANSI连接设置。看看有什么不同,因为我打赌你有不同的东西