如何提高SQL中数据库间查询的执行速度
我正在使用这个数据库间查询,如下所示,但它的工作速度非常慢。有没有其他方法可以加快此查询的执行速度如何提高SQL中数据库间查询的执行速度,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我正在使用这个数据库间查询,如下所示,但它的工作速度非常慢。有没有其他方法可以加快此查询的执行速度 update [CCAVENUE].[dbo].[ARInvoice] set Post_Flag = 'Y', sap_docentry = (select DocEntry from [SAPCCAVENU].[dbo].[oinv] where U_Invoice_No = Invoice_no S
update [CCAVENUE].[dbo].[ARInvoice]
set Post_Flag = 'Y',
sap_docentry = (select DocEntry
from [SAPCCAVENU].[dbo].[oinv]
where U_Invoice_No = Invoice_no SQL_Latin1_General_CP850_CI_AS)
尝试下面的查询
UPDATE [CCAVENUE].[dbo].[ARInvoice] SET Post_Flag='Y', sap_docentry=DocEntry
FROM [CCAVENUE].[dbo].[ARInvoice]
JOIN [SAPCCAVENU].[dbo].[oinv] ON U_Invoice_No=Invoice_no
如果这两个表只是同一个服务器,那么您可以在下面进行尝试
UPDATE AR
SET AR.Post_Flag='Y',
AR.sap_docentry = OI.DocEntry
FROM [CCAVENUE].[dbo].[ARInvoice] AR
INNER JOIN [SAPCCAVENU].[dbo].[oinv] OI
ON U_Invoice_No=Invoice_no collate SQL_Latin1_General_CP850_CI_AS
SELECT DISTINCT U_Invoice_No, DocEntry INTO #tmp_oinv FROM [SAPCCAVENU].[dbo].[oinv]
UPDATE AR
SET AR.Post_Flag='Y',
AR.sap_docentry = OI.DocEntry
FROM [CCAVENUE].[dbo].[ARInvoice] AR
INNER JOIN #tmp_oinv OI
ON U_Invoice_No=Invoice_no collate SQL_Latin1_General_CP850_CI_AS
如果两个表都在不同的数据库服务器上,那么您应该尝试下面的方法
UPDATE AR
SET AR.Post_Flag='Y',
AR.sap_docentry = OI.DocEntry
FROM [CCAVENUE].[dbo].[ARInvoice] AR
INNER JOIN [SAPCCAVENU].[dbo].[oinv] OI
ON U_Invoice_No=Invoice_no collate SQL_Latin1_General_CP850_CI_AS
SELECT DISTINCT U_Invoice_No, DocEntry INTO #tmp_oinv FROM [SAPCCAVENU].[dbo].[oinv]
UPDATE AR
SET AR.Post_Flag='Y',
AR.sap_docentry = OI.DocEntry
FROM [CCAVENUE].[dbo].[ARInvoice] AR
INNER JOIN #tmp_oinv OI
ON U_Invoice_No=Invoice_no collate SQL_Latin1_General_CP850_CI_AS
注:
尝试此查询。在这里,我使用CTE(即公共表表达式)更新数据。连接比子查询快。可能是其他进程使用了此表。OP query正在访问两个不同的
数据库
而不是数据库服务器
,那么您应该尝试第一个查询。这两个表具有不同的排序规则?您可以在其中创建一个计算列,将发票号预转换为正确的排序规则,然后根据它创建索引您必须执行的操作为提高性能,对花费时间的位置进行一些分析。没有足够的信息来执行当前的猜测之外的任何操作。更新的表是否有写得不好的触发器?(1)更改排序规则几乎会杀死对子查询的任何优化。(2) 如果不知道哪个列来自哪个表,就很难提出任何建议。限定所有列引用!!!