2013-08-29 59 views
0

我正在解决一个运行很长时间的流程,这个select statemet运行超过30分钟,当我注释掉它的各个部分时,它运行速度非常快。我在表格旁边放置了一个看起来导致问题的表格,其中有两个**在Empid和ChangeDate上有一个聚集索引(这些列不相邻)不确定是否重要,也没有这些表格有超过3000行。我希望有一些简单的调整帽子需要作出。有什么我应该在源表中看看?任何建议,将不胜感激。我已经在Google搜索结果中使用了多个输入连接,但没有运气。为了排除故障我把与(NOLOCK)的。左连接导致头痛

select 
je.EmpID, 
max(med.ChangeDate) as Max_Medical_ChangeDate, 
max(den.ChangeDate) as Max_Dental_ChangeDate, 
max(k.ChangeDate) as Max_401K_ChangeDate, 
max(ltd.ChangeDate) as Max_LTD_ChangeDate, 
max(std.ChangeDate) as Max_STD_ChangeDate, 
max(life.ChangeDate) as Max_Life_ChangeDate, 
max(sal.ChangeDate) as Max_Salary_ChangeDate, 
max(ltdexe.ChangeDate) as Max_LTDEXE_ChangeDate 
max(accid.ChangeDate) as Max_Accid_ChangeDate, 
max(cancr.ChangeDate) as Max_Cancr_ChangeDate, 
max(hosp.ChangeDate) as Max_Hosp_ChangeDate 
from Judge_Emp je WITH(NOLOCK) 
      left join Medical med on je.EmpID = med.EmpID 
      left join Dental den on med.EmpID = den.EmpID 
      left join R401K k on den.EmpID = k.EmpID 
      left join STDIns std on k.EmpID = std.EmpID 
      left join LTDIns ltd on std.EmpID = ltd.EmpID 
     * left join LTDEXEIns ltdexe on ltd.EmpID = ltdexe.EmpID 
     ** left join LifeIns life on ltdexe.EmpID = life.EmpID 
     * left join Salary sal on life.EmpID = sal.EmpID 
     left join AF_Accid accid on accid.EmpID=sal.EmpID 
     left join AF_Cancr cancr on cancr.EmpID=accid.EmpID 
     left join AF_Hosp hosp on hosp.EmpID=cancr.EmpID 
group by je.EmpID 

感谢

+0

你是什么意思“用于故障排除的目的我把(nolock)在”? –

回答

0

这是太长了评论。

如果您使用的是left outer join s,则您的连接条件应该引用链中的第一个表。例如:

from Judge_Emp je WITH(NOLOCK) 
      left join Medical med on je.EmpID = med.EmpID 
      left join Dental den on je.EmpID = den.EmpID 
      left join R401K k on je.EmpID = k.EmpID . . . 

不是:

from Judge_Emp je WITH(NOLOCK) 
      left join Medical med on je.EmpID = med.EmpID 
      left join Dental den on med.EmpID = den.EmpID 
      left join R401K k on den.EmpID = k.EmpID . . . 

的原因是,med.EmptID可能是NULL,这将导致连接失败。 (这对内连接没有任何影响)。不过,这可能不会影响查询的性能。我的猜测是,这些有多个匹配的行,并为每个客户生成笛卡尔产品。