使用SQL 2005:“花费太多时间执行”
我想过滤日期,日期不应该在假日中显示,而我正在使用三个带内连接的表
当我运行以下查询时,执行会花费太多时间,因为我使用三个表过滤了cardeventdate。
查询
SELECT
PERSONID, CardEventDate tmp_cardevent3
WHERE (CardEventDate NOT IN
(SELECT T_CARDEVENT.CARDEVENTDATE
FROM T_PERSON
INNER JOIN T_CARDEVENT ON T_PERSON.PERSONID = T_CARDEVENT.PERSONID
INNER JOIN DUAL_PRO_II_TAS.dbo.T_WORKINOUTTIME ON T_CARDEVENT.CARDEVENTDAY = DUAL_PRO_II_TAS.dbo.T_WORKINOUTTIME.DAYCODE
AND T_PERSON.TACODE = DUAL_PRO_II_TAS.dbo.T_WORKINOUTTIME.TACODE
WHERE (DUAL_PRO_II_TAS.dbo.T_WORKINOUTTIME.HOLIDAY = 'true')
)
)
ORDER BY PERSONID, CardEventDate DESC
对于上面提到的Query,还有其他方法可以进行日期过滤。
期待我的查询的替代查询?
答案 0 :(得分:2)
我很确定这不是连接表是问题,而是“不在”使它变慢。
尝试使用连接:
select m.PERSONID, m.CardEventDate
from T_PERSON p
inner join T_CARDEVENT c on p.PERSONID = c.PERSONID
inner join DUAL_PRO_II_TAS.dbo.T_WORKINOUTTIME w
on c.CARDEVENTDAY = w.DAYCODE
and p.TACODE = w.TACODE
and w.HOLIDAY = 'true'
right join tmp_cardevent3 m on m.CardEventDate = c.CardEventDate
where c.CardEventDate is null
order by m.PERSONID, m.CardEventDate desc
(查询中缺少from
个句子,因此我不知道您尝试从哪个表中获取数据。)
编辑:
将tmp_cardevent3放在正确的位置。
答案 1 :(得分:0)
您是否在用于进行连接的所有列上创建了索引?特别是,我会考虑T_PARDEVENT中的PERSONID索引,T_PERSON和T_WORKINOUTTIME中的TACODE以及T_WORKINOUTTIME中的HOLIDAY。