2010-11-11 98 views
10

MIN/MAX vs ORDER BY and LIMIT選擇MAX或ORDER BY限制1

要跟進這個問題:我發現了一些成績從什麼肖恩McSomething描述非常不同:

我有300M左右行的表。

Select max(foo) from bar;大約需要15秒。運行

Select foo from bar order by foo desc limit 1;需要3秒。以運行

肖恩的聲明「它看起來像MIN()是最好的方式 - 在最壞的情況下速度更快,在最好的情況下難以區分」對於這種情況並不適用......但我不知道爲什麼。任何人都可以提供解釋嗎?

編輯:因爲我無法在這裏顯示錶的結構:假設bar是ndb_cluster中的一個表,沒有關係,foo是沒有索引的任意數據點。

+0

你可以提供'SHOW CREATE TABLE bar' - 索引或外鍵可能會影響它 – Mikhail 2010-11-11 17:30:19

+5

你有兩個SQL語句不會做同樣的事情,你確定你測試正確?您的最後一條語句將不得不'按條件排序',因爲它們是相同的。 – nos 2010-11-11 17:31:21

+0

引擎類型也可以在查詢性能中起作用。 – 2010-11-11 17:31:38

回答

5

要避免全部通過,請在foo列中添加INDEX

+1

foo上的索引缺乏是MAX運行如此緩慢的原因嗎?爲什麼? – 2010-11-11 18:22:35

+3

由於缺乏索引意味着需要在桌上進行全面傳球。 – Vic 2010-11-11 20:52:39

+1

假設foo上有一個索引,'MAX(foo)'或'by foo DESC limit 1'會更快嗎? – Programster 2014-11-17 11:31:49

0

我有類似的情況,有關列問題的索引,但通過&限制解決方案的順序似乎更快。這有多好:)