2013-03-07 114 views
5

問題很簡單。哪個查詢會更快:性能差異:選擇top 1 order by vs. select min(val)

SELECT TOP 1 value FROM table ORDER BY value 

SELECT TOP 1 MIN(value) FROM table 

我們可以假設,我們有兩種情況,案例1.沒有索引與案例2.價值指數。
任何見解都值得讚賞。謝謝!

+6

你不需要調用'TOP 1',因爲'MIN'已經返回一個值。 – 2013-03-07 16:07:47

+0

如果有任何差異,它將取決於所使用的dbms,因此您可能想要添加哪一個您感興趣。 – 2013-03-07 16:13:11

+1

這兩個操作不相等,如果例如在列中存在'NULL'值1' +'order by'將返回NULL,MIN則是最小的非空值。 – Magnus 2013-03-07 16:32:44

回答

9

在不存在索引的情況下:

  • MIN(值)應在O(N)的時間與單個掃描來實現;
  • TOP 1 ORDER BY將需要O(N日誌N)時間,因爲指定的排序(除非數據庫引擎足夠聰明來讀取意圖,我不想依賴於生產代碼)。

當一個索引確實存在:

  • 兩者都應僅需要O(1)時間,使用索引。
+0

謝謝。我一直在尋找這樣的答案! – www 2013-03-07 18:48:31

+0

我看到「已批准」進來 - 這總是足夠的感謝。 – 2013-03-07 18:52:38