Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何提高SQL中数据库间查询的执行速度_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

如何提高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) 如果不知道哪个列来自哪个表,就很难提出任何建议。限定所有列引用!!!