[英]Left Outer Join Query Extremely Slow - SQL Server
SQL Server查詢的巨大問題!
因此,以下查詢在查詢中利用了JOIN命令,但是運行時間不少於15-20分鍾! 不知道如何更好地優化此代碼:(
有關如何解決此問題的任何想法?
SELECT dbo.DB_Timetrack.[JOB #], dbo.DB_Timetrack.[Last Name], dbo.DB_Timetrack.[First Name], dbo.DB_Timetrack.HOURS, dbo.DB_Timetrack.BEGDATE, dbo.DB_Timetrack.LOCATNID,
dbo.DB_Timetrack.DESCR, dbo.DB_Timetrack.CODE, dbo.DB_Timetrack.TYPE,
CASE WHEN dbo.DB_Job_status_open_and_closed.WS_Job_Number != '' THEN dbo.DB_Timetrack.Hours ELSE 0 END AS HoursWon, dbo.DB_Timetrack.NUMBERONLY,
dbo.DB_Job_status_open_and_closed.WS_Job_Number_Only, dbo.DB_Job_status_open_and_closed.CREATDDT, DATEDIFF(Day, dbo.DB_Timetrack.BEGDATE,
dbo.DB_Job_status_open_and_closed.CREATDDT) AS Date_Difference, DBCRM_MSCRM.dbo.DB_Opportunity_SalespersonID.new_GPSalespersonName,
CASE WHEN DBCRM_MSCRM.dbo.DB_Opportunity_SalespersonID.new_GPSalesRepCode <> '' THEN DBCRM_MSCRM.dbo.DB_Opportunity_SalespersonID.new_GPSalesRepCode ELSE dbo.DB_Job_status_open_and_closed.Salesperson
COLLATE Latin1_General_CI_AI END AS SalespersonID
FROM dbo.DB_Timetrack LEFT OUTER JOIN
DBCRM_MSCRM.dbo.DB_Opportunity_SalespersonID ON dbo.DB_Timetrack.NUMBERONLY COLLATE Latin1_General_CI_AI = DBCRM_MSCRM.dbo.DB_Opportunity_SalespersonID.Job_Num_Only LEFT OUTER JOIN
dbo.DB_Job_status_open_and_closed ON dbo.DB_Timetrack.NUMBERONLY = dbo.DB_Job_status_open_and_closed.WS_Job_Number_Only
WHERE (dbo.DB_Timetrack.HOURS > 0) AND (dbo.DB_Timetrack.DESCR <> '') AND (dbo.DB_Timetrack.BEGDATE > CONVERT(DATETIME, '2013-01-01 00:00:00', 102))
任何建議將不勝感激!
這基本上是您的查詢:
SELECT . . .
FROM dbo.DB_Timetrack LEFT OUTER JOIN
DBCRM_MSCRM.dbo.DB_Opportunity_SalespersonID
ON dbo.DB_Timetrack.NUMBERONLY COLLATE Latin1_General_CI_AI = DBCRM_MSCRM.dbo.DB_Opportunity_SalespersonID.Job_Num_Only LEFT OUTER JOIN
dbo.DB_Job_status_open_and_closed
ON dbo.DB_Timetrack.NUMBERONLY = dbo.DB_Job_status_open_and_closed.WS_Job_Number_Only
WHERE (dbo.DB_Timetrack.HOURS > 0) AND
(dbo.DB_Timetrack.DESCR <> '') AND
(dbo.DB_Timetrack.BEGDATE > CONVERT(DATETIME, '2013-01-01 00:00:00', 102))
1.)首先,排序規則語句可能會殺死對索引的任何使用。
2.)您需要確保在DB_Job_status_open_and_closed(WS_Job_Number_Only)
和DB_Opportunity_SalespersonID(Job_Num_Only)
上具有索引。
3.)您可能還會在DB_Timetrack(BEGDATE, HOURS, DESCR, NumberOnly)
上找到一個索引DB_Timetrack(BEGDATE, HOURS, DESCR, NumberOnly)
,這將有所幫助(如果您確實在使用SQL Server,則最后三列可以include
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.