2012-12-26 89 views
0

不能優化我有一個SQL查詢:需要在SQL語句

select person from table t1 
inner join person_history ph 
on t1.person = ph.person 
and t1.person not in (select person from person_history 
         where effective_date < '01-01-2013') 
and ph.person.effective_date > '01-01-2013' 

因爲person_history含有大量的記錄,此查詢的時間過長。

如何優化此代碼?

+0

這是什麼:'和ph.person.effective_date> 01 -01-2013''甚至不顯得比如有效的SQL。 –

+0

您是否嘗試讓數據庫'EXPLAIN'查詢?這通常是找出原因很慢的好方法 – ThiefMaster

+0

這是什麼類型的SQL?性能和調優往往取決於實現。 – RBarryYoung

回答

1

你就不能這樣做:

select person from table t1 
inner join person_history ph 
on t1.person = ph.person 
where ph.effective_date >= '01-01-2013' 
1

你不必排除NOT IN,因爲它已經被排除在WHERE過濾器! 的SQL將是簡單如下:

select person from table t1 
inner join person_history ph on t1.person=ph.person 
where effective_date > '01-01-2013' 

或者:

select person from table t1 
WHERE person IN(select ph.person from person_history ph 
where effective_date > '01-01-2013' and t1.person=ph.person)