我有一個SQL查詢包含一個derieved表。帶有派生表的SQL查詢 - 性能問題
派生的查詢看起來是這樣的:
SELECT
ObjectId, MIN(StatusHistoryId) AS FirstStatusHistoryId
FROM
dbo.StatusHistory
WHERE
ObjectType = 'SchemeTypeApplication'
AND (StatusId = 504 OR StatusId = 501)
AND IsDeleted = 0
GROUP BY
ObjectId
這需要大約2分鐘來完成它自己,它拉回來近30萬行。整個查詢(這裏面)大致相同。沒有派生表,它只需要不到一秒鐘的時間,所以我知道這是造成問題的問題。
我的問題是,有無論如何提高dereived表查詢的速度?也許增加一些索引到StatusHistory表(我有點垃圾索引...)?或者使用派生表以外的其他方法?
任何建議表示讚賞。
感謝
有在您的文章沒有導出查詢,只有一些布爾代數。您還應該首先在您的where子句中放置限制性最強的列。例如,如果您知道只有3條記錄的狀態被刪除,並且有100萬條記錄的對象類型爲schemetypeapplication,那麼您應該將刪除的狀態作爲您的開始位置。優化器可能會選擇它,特別是如果它是sql server,但它肯定值得注意。 – JonH 2012-02-01 15:54:23
猜猜該學習索引了,如果要編寫數據庫查詢,就沒有理由「垃圾索引」。 – HLGEM 2012-02-01 16:22:35
@JonH,我沒有發佈整個查詢,因爲它太大了。帖子中的查詢是沒有外部查詢的派生查詢 - 如果這是有道理的。 – Jamie 2012-02-01 16:27:15