如何提高多个连接的性能

时间:2014-02-13 18:27:57

标签: sql sql-server join

我有一个包含多个连接的查询。当我执行查询时,它需要太长时间。你能建议我如何改进这个查询吗?

ALTER View [dbo].[customReport] 
As 
SELECT DISTINCT ViewUserInvoicerReport.Owner,      
    ViewUserAll.ParentID As Account , ViewContact.Company, 
    Payment.PostingDate, ViewInvoice.Charge, ViewInvoice.Tax, 
    PaymentProcessLog.InvoiceNumber  
FROM
    ViewContact 
    Inner Join ViewUserInvoicerReport on  ViewContact.UserID = ViewUserInvoicerReport.UserID 
    Inner Join ViewUserAll on  ViewUserInvoicerReport.UserID = ViewUserAll.UserID 
    Inner Join Payment on Payment.UserID = ViewUserAll.UserID 
    Inner Join ViewInvoice on Payment.UserID = ViewInvoice.UserID 
    Inner Join PaymentProcessLog on ViewInvoice.UserID = PaymentProcessLog.UserID
GO

3 个答案:

答案 0 :(得分:1)

删除不同的。

这不是加入问题。问题是所有行必须进入临时表以找出哪些是双 - 如果你分析查询计划(程序员101 - 学会快速使用),你会发现连接可能不是大问题,而是不同的是。

和IIRC明显是USELESS,因为所有行都是唯一的...不是100%肯定,但字段列表似乎表明。

请尽快使用区别;)

答案 1 :(得分:0)

您应该看到查询执行计划并逐节优化查询。

整体优化过程包括两个主要步骤:

  1. 隔离长时间运行的查询。
  2. 确定长时间运行查询的原因。
  3. 请参阅 - How To: Optimize SQL Queries了解分步说明。

    enter image description here

    enter image description here

答案 2 :(得分:0)

很难说如何在不知道每个表中有多少行数据,索引哪些列,您正在寻找什么性能以及您正在使用哪个数据库之类的情况下如何提高查询性能。< / p>

最重要的是: 1.确保连接中使用的所有列都已编制索引 2.确保查询执行计划表明您正在使用预期的索引