Answers:
在最坏的情况下,如果要查看未索引的字段,则使用MIN()
需要对表进行一次完整的遍历。使用SORT
并且LIMIT
需要一个文件排序。如果针对大表运行,则预期的性能可能会存在显着差异。作为无意义的数据点,我的开发服务器上的106,000行表MIN()
花了0.36秒SORT
,LIMIT
花了0.84秒。
但是,如果您正在查看索引列,则很难注意到该差异(两种情况下无意义的数据点均为0.00s)。但是,查看一下explain的输出,看起来好像MIN()
可以简单地从索引中选取最小值(“ Select table Optimized away”和“ NULL”行),而SORT
and LIMIT
仍需要对索引进行有序遍历(106,000行)。实际的性能影响可能微不足道。
它看起来像是MIN()
要走的路-在最坏的情况下更快,在最好的情况下没有区别,它是标准SQL,并且最清楚地表达了您想要获得的价值。正如mson所述,唯一似乎需要使用SORT
和的LIMIT
情况是,您正在编写一个通用运算,该运算从任意列中查找前N个值或后N个值,因此不值得写出特殊情况的操作。
SELECT MIN(`field`)
FROM `tbl`;
仅仅是因为它与ANSI兼容。限制1特定于MySql,因为TOP特定于SQL Server。
如MSON和肖恩McSomething指出,MIN是优选的。
使用ORDER BY + LIMIT的另一个原因是,如果要获取与MIN列不同的列的值。
例:
SELECT some_other_field, field
FROM tbl
ORDER BY field
LIMIT 1