我有一个表Candidate
,其中包含43337行数据,这些数据是由许多员工创建的。
我希望得到一份报告,其中我会在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
表中进行索引..
如何在几秒钟内执行此查询..?
答案 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_id
和Employees.id
之间存在外键关系。)
此查询的最佳索引是覆盖索引,其中包含查询中提到的三列:
create index idx_candidate_createddate_creator_id_id on candidate(created_date, creator_id, id);