我需要從數據庫中獲取所有運行,但需要標記是否存在此運行的錯誤。使用3個表優化TSQL查詢
3表:
- 上運行:包含運行)
- Runfiles:包含一個運行期間處理
- 消息全部文件ID:包含錯誤,警告,...
此查詢是否可以進一步優化?
SELECT TOP 1000 runid,
start,
end,
userid,
CASE
WHEN EXISTS(SELECT rf.fk_fileid
FROM runfiles rf
WHERE rf.fk_runid = r.runid
AND EXISTS(SELECT m.messageid
FROM messages m
WHERE m.fk_fileid =
rf.fk_fileid
AND m.fk_statusid = 4))
THEN 1
ELSE 0
END AS ContainsError
FROM runs r
ORDER BY start DESC
請不要評論表名稱,他們被翻譯爲這個問題。
謝謝!
看執行計劃並添加適當的索引 – Magnus 2013-02-20 14:58:04
「優化」是什麼意思?如果您詢問性能,那麼您應該在查詢中包含執行計劃。如果您問的是提高可讀性或可維護性,那麼[代碼評論網站](http://codereview.stackexchange.com/)將是一個更好的問題。 – Pondlife 2013-02-20 16:21:07
有時你只需要比較不同的選項。你有沒有試過在運行文件和消息上的左連接? – Narnian 2013-02-20 17:19:23