【发布时间】:2016-08-29 15:17:57
【问题描述】:
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))
任何建议将不胜感激!
【问题讨论】:
-
15-20 分钟?这些表有多少行?
-
要问一个显而易见的问题,您是否在连接列上设置了索引?
-
您的代码看起来更像 SQL Server 而不是 MySQL。你确定你必须正确标记问题吗?
-
400K 行。海量数据。的确,我愿意。尝试创建多个索引差异,但无济于事
-
@GordonLinoff 感谢您的收获。我已经更正了标记问题
标签: sql sql-server database performance join