某查詢 ORDER BY CYZoneFeedBack.Time DESC 導致大量 CPU 與排序開銷。經分析執行計畫,發現排序運算子 (Sort) 佔用絕大部分成本。
SELECT TOP 10 FeedBackID, UserID, ContentID, [Content], Time, AddType, IP
FROM CYZoneFeedBack
WHERE ContentID IN (SELECT ArticleID FROM CyzoneArticle WHERE UserID = @User AND DelFlag = 0 AND PublishType <> 'b')
AND CYZoneFeedBack.DelFlag = 0
ORDER BY CYZoneFeedBack.Time DESC;

發現 FeedBackID 為遞增身分識別欄位,與時間單調遞增高度相關。改為 ORDER BY FeedBackID DESC 後,排序運算子消失,改為索引順序掃描。
SELECT TOP 10 FeedBackID, UserID, ContentID, [Content], Time, AddType, IP
FROM CYZoneFeedBack
WHERE ContentID IN (SELECT ArticleID FROM CyzoneArticle WHERE UserID = 107 AND DelFlag = 0 AND PublishType <> 'b')
AND CYZoneFeedBack.DelFlag = 0
ORDER BY CYZoneFeedBack.FeedBackID DESC;

INCLUDE (Time) 或調整叢集索引鍵亦可解決,但需權衡寫入開銷。