SQL查询需要很长时间才能执行

时间:2014-07-25 11:13:30

标签: sql sql-server

我有一个表Candidate,其中包含433​​37行数据,这些数据是由许多员工创建的。

我希望得到一份报告,其中我会在7天内获得每位员工的个人创建候选人。为此,我执行了以下查询。

select E.Id, E.Employeename,
(select 
    count(C.ID) 
from 
    candidate C 
where 
    CreatorID = E.ID  
    and C.Createdate between Convert(DateTime,'19/07/2014',103) And Convert(DateTime,'26/07/2014',103))

From Employee E

其中E.ID是来自Employee表的员工ID ..

但是上面的查询大约需要2分钟才能执行..我没有在Candidate表中进行索引..

如何在几秒钟内执行此查询..?

1 个答案:

答案 0 :(得分:1)

根据您对问题的描述,查询应如下所示:

select Creator_id, count(C.ID) 
from candidate C 
where C.Createdate between Convert(DateTime, '19/07/2014', 103) And 
                           Convert(DateTime, '26/07/2014', 103)
group by Creator_id;

(这假设candidate.Creator_idEmployees.id之间存在外键关系。)

此查询的最佳索引是覆盖索引,其中包含查询中提到的三列:

create index idx_candidate_createddate_creator_id_id on candidate(created_date, creator_id, id);