我有這個精心緩慢的查詢,並且不知道問題是什麼。我曾嘗試添加多個where子句,但沒有任何效果。執行時間超過5分鐘。SQL內部連接,執行時間
目標是選擇上次使用LM_MAT中的產品的時間。這是從股票突變確定的; LMH_MAT。 LMH_MAT確實有160K記錄,但是從lmh_mat執行Select *只需要16 ms。
我已經確定從this site這樣做的解決方案。
刪除第二個子查詢(select top 1 ...)確實會將執行時間降低到6秒以下,這意味着刪除整個目的:選擇上一次使用產品的時間。
平臺:Sybase Advantage數據架構師。
我希望有人能幫助我!
親切的問候, 盧卡斯
查詢:
select
lm_matn,
LM_OMSCH,
lm_hoev,
lm_minh,
lm_preh,
lm_datin,
XDate
from lm_mat A
left join (select lmh_matn, lmh_id, cast(lmh_date as sql_date) as XDate
from lmh_mat) F
on A.lm_matn = F.lmh_matn
AND F.lmh_id in
(select top 1 FF.lmh_id
from lmh_mat FF
where FF.lmh_matn=A.lm_matn
order by FF.lmh_date desc)
group by
lm_matn,
LM_OMSCH,
lm_hoev,
lm_minh,
lm_preh,
lm_datin,
XDate
您可以發佈一個執行計劃? –
爲了清楚你想從'lmh_mat'表中選擇'lmh_date'和'lmh_matn',把它放入一個帶有'lm_mat'的左連接中?如果你從行中選擇隨機值,這是非常棘手的,但是你想要的兩個值都與子查詢有關,所以這裏應該有一個簡化。 – 2013-10-28 15:02:09