在**正確建立索引**的情況下,TOP N 與 SET ROWCOUNT N 性能**相當**;但在**無序/未索引**數據上,TOP N **明顯更快**。
| 場景 | TOP N | SET ROWCOUNT N | 說明 |
|---|---|---|---|
| 有序輸入(索引有序掃描) | 極快 | 極快 | 兩者均走索引順序讀取,停止條件相同 |
| 無序輸入(堆表全掃描) | 快 | 慢 | TOP N 維護小臨時表;ROWCOUNT 需全掃描/全排序 |
| 近似有序輸入 | 較快 | 慢 | TOP N 僅少量調整末尾行 |
| 無序插入構建的大表 | 效率不高 | 效率不高 | 兩者均需全表掃描,I/O 時間一致 |
TOP N:語法標準(ANSI SQL 兼容性更好)、優化器支持更完善、可配合 ORDER BY 精確控制排序ORDER BY 列的索引能讓兩者都發揮最佳性能SET ROWCOUNT:已被微軟標記為不推薦,未來版本可能移除;且影響 INSERT/UPDATE/DELETE 語句行為,副作用大OFFSET ... FETCH NEXT 替代兩者TOP N 在無序數據上通過「小臨時表」機制實現算法級優化,是限制結果集行數的首選方案;SET ROWCOUNT N 屬舊式語法,除兼容極老代碼外不建議新代碼使用。