2014-02-13 30 views
3

這可能是一個非常簡單的問題,但沒有找到完美的答案。 查詢是要找到可以通過使用最多要做的第二高工資和限制都..max與限制哪個更有效

使用MAX

select max(salary) from table1 where 
salary < (select max(salary) from table1); 

使用限制

select salary from table1 where 
salary < (select max(salary) from table1) 
order by salary desc 
limit 1; 

因此,這考慮到有1000條記錄,查詢會更好,更省時。

在此先感謝。

+0

使用訂單和索引薪水列.. – zzlalani

回答

5

這兩種查詢都不是正確的方法。您從所有記錄中薪水低於MAX(薪水)的記錄中獲得MAX(薪水)。換句話說,薪水第二高。做到這一點的方法就是這樣的:

SELECT salary FROM table1 ORDER BY salary DESC LIMIT 1,1 

如果你確實想最大,只是做

SELECT MAX(salary) FROM table1 

沒有必要在這裏的子查詢。無論如何,請確保您已將索引編入薪水列,否則無論您如何運行查詢,查詢都會很慢。

+0

但一般來說哪個更有效的最大或最小?這只是我考慮的一個例子。 –

+1

如果您只想知道最大值,請執行MAX() - 服務器可能會將'ORDER BY salary DESC LIMIT 1'視爲等同於使用MAX() ',但並非總是如此,所以使用'MAX()'。如果你需要一個偏移量,使用'LIMIT',而不是子查詢 - 子查詢幾乎總是慢得多,不需要的時候應該避免。 –

2

在我看來,第一個查詢MAX會更有效率。

第二個查詢需要對結果進行排序,結果有自己的開銷。我已經看到聚合查詢通常比更有效率,全選查詢。

聲明:這完全基於我對SQL查詢的理解,但我沒有做任何基準測試。