查詢優化我已經具有4列具有數百萬行的表
表PKID,OutMailID,JobMailingDate,InsertDatetime 這是數據OT如何插入到表 PKID是表中的主鍵 對於帶有JObMailingDate的單個outMailID,在平均3個記錄中存在與 不同的插入日期時間。該表具有數百萬條記錄
我有具有相同的數據,但那些被partaining不同類別
現在我想找出 1)找到許多其他表中的所有OutMailID誰InsertDatetime是參數數據範圍 2)一旦我有OutMailID的名單我想找到最低InsertDatetime所有這些OutMailID如果這分鐘日期落在參數1和參數2
之間的數據表之間是這樣
Select 1 as PKID,1 as OutMailID,'2010/01/01' as JobMailingDate,'2010/01/01' as InsertDatetime
UNION ALL
Select 2 as PKID,1 as OutMailID,'2010/01/01' as JobMailingDate,'2010/01/02' as InsertDatetime
UNION ALL
Select 3 as PKID,1 as OutMailID,'2010/01/01' as JobMailingDate,'2010/01/03' as InsertDatetime
UNION ALL
Select 4 as PKID,1 as OutMailID,'2010/01/01' as JobMailingDate,'2010/01/04' as InsertDatetime
所有上述2步,我想在一個單一的查詢來執行,所以我的查詢是somethig這樣
Select
OutMailID,Min(InsertDatetime)
from
Table T
INNER JOIN
(
Select
OutMailID
from
Table
Where
InsertDatetime Between @Param1 and @Param2
) as T1 On (T1.OutMailID = T.outMailID)
Group by
OutMailID
Having Min(InsertDatetime) Between Between @Param1 and @Param2
但這種效果不理想。任何人都可以請建議我一個這樣做的好方法
第二個問題是,一旦我有第一個查詢的輸出,然後我使用相同的上述查詢其他類別來找出最小的InsertDatatime在該類別中,一旦我擁有所有的分日期爲所有類別的話,我必須找到在所有類別中最小插入日期
能否請你幫我在這
感謝 阿圖爾
我會用'with'語句去執行更好的性能 –
用您正在使用的數據庫標記您的問題。正如人們可能會懷疑的那樣,實際的發動機作爲性能考慮很重要。 –
您還應該添加所涉及的表的定義(作爲'create table'語句)定義的所有索引(作爲'create index')和執行計劃(請以純文本格式,屏幕截圖隱藏太多細節) –