3 回答

TA貢獻(xiàn)1869條經(jīng)驗(yàn) 獲得超4個(gè)贊
在最糟糕的情況下,如果您正在查看未MIN()
編制索引的字段,則使用該表需要單次完整傳遞。使用SORT
并LIMIT
需要一個(gè)文件排序。如果針對(duì)大型桌面運(yùn)行,則可能會(huì)在性能方面存在顯著差異。作為一個(gè)毫無意義的數(shù)據(jù)點(diǎn),在我的開發(fā)服務(wù)器上占用MIN()
了.36秒,SORT
然后LIMIT
在我的開發(fā)服務(wù)器上的106,000行表中占用了0.84秒。
但是,如果您正在查看索引列,則差異更難以注意到(兩種情況下無意義的數(shù)據(jù)點(diǎn)均為0.00秒)。然而,看看explain的輸出,它看起來MIN()
能夠簡(jiǎn)單地從索引中獲取最小值('Select tables optimized away'和'NULL'行),SORT
而且LIMIT
仍然需要對(duì)索引執(zhí)行有序遍歷(106,000行)。實(shí)際的性能影響可能微不足道。
它似乎MIN()
是要走的路 - 在最壞的情況下更快,在最好的情況下無法區(qū)分標(biāo)準(zhǔn)SQL,并且最明確地表達(dá)了您想要獲得的價(jià)值。正如mson所提到的那樣,似乎使用SORT
并且LIMIT
可取的唯一情況是,你在編寫一個(gè)從任意列中找到頂部或底部N值的一般操作,并且不值得寫出特殊情況操作。

TA貢獻(xiàn)2039條經(jīng)驗(yàn) 獲得超8個(gè)贊
SELECT MIN(`field`) FROM `tbl`;
僅僅因?yàn)樗cANSI兼容。限制1特別適用于MySql,因?yàn)門OP是SQL Server。

TA貢獻(xiàn)1826條經(jīng)驗(yàn) 獲得超6個(gè)贊
MIN是優(yōu)選的。
ORDER BY + LIMIT有用的另一個(gè)原因是,如果要獲取與MIN列不同的列的值。
例:
SELECT some_other_field, fieldFROM tblORDER BY field LIMIT 1
添加回答
舉報(bào)