我有3個表:有沒有一種方法來優化這個SQL Server查詢?
表1:
id | name
1 | joe
2 | peter
3 | sandra
表2:
id | fkId | date_updated
1 | 1 | 2013-01-31
2 | 1 | 2013-04-01
3 | 2 | 2013-02-04
4 | 2 | 2013-01-02
表3:
id | fkId | date_updated
1 | 1 | 2013-01-31
2 | 3 | 2013-04-01
3 | 3 | 2013-02-04
4 | 2 | 2013-01-02
我有以下幾點:
SELECT *
FROM
table1
LEFT OUTER JOIN
table2 ON table1.id = table2.fkId
LEFT OUTER JOIN
table3 ON table1.id = table3.fkId
GROUP BY
table1.id
HAVING
table2.date_updated = max(table2.date_updated)
AND table3.date_updated = max(table3.date_updated)
我的輸出是這樣的:
name | table2 | table3
joe | 2013-04-01 | 2013-01-31
peter | 2013-02-04 | 2013-01-02
sandra| | 2013-04-01
我得到我所需要的數據,但此查詢時間太長,反正是有優化它,而無需修改表指數?
事情指出:
表2和表3是不一樣的表。
我需要從table2和table3中獲取「last_updated」的整行,而不僅僅是日期。
編輯**
查詢使用WHERE table1.id = id
時,返回一個記錄服用約3-4秒。
表1有〜84000區域經濟共同體
表2有〜96000區域經濟共同體
表3有〜81000區域經濟共同體
table2.date_updated和table3.date_updated *上的索引*可能*有幫助。但你最好的選擇是總是看執行計劃。 –
但是,如果沒有列出索引的內容,您提到的是不修改索引,我們不一定建議更多。我會通過(id,date_updated) – DRapp
@DRapp在這兩個表上有一個索引。'id'不是'date_updated'列只有索引 – SOfanatic