为了账号安全,请及时绑定邮箱和手机立即绑定

MIN / MAX与ORDER BY和LIMIT

MIN / MAX与ORDER BY和LIMIT

红糖糍粑 2019-08-12 17:24:23
MIN / MAX与ORDER BY和LIMIT在以下查询中,您认为哪种方法更好?你的理由是什么(代码效率,更好的可维护性,更少的WTFery)......SELECT MIN(`field`)FROM `tbl`;SELECT `field`FROM `tbl`ORDER BY `field`LIMIT 1;
查看完整描述

3 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

在最糟糕的情况下,如果您正在查看未MIN()编制索引的字段,则使用该表需要单次完整传递。使用SORTLIMIT需要一个文件排序。如果针对大型桌面运行,则可能会在性能方面存在显着差异。作为一个毫无意义的数据点,在我的开发服务器上占用MIN()了.36秒,SORT然后LIMIT在我的开发服务器上的106,000行表中占用了0.84秒。

但是,如果您正在查看索引列,则差异更难以注意到(两种情况下无意义的数据点均为0.00秒)。然而,看看explain的输出,它看起来MIN()能够简单地从索引中获取最小值('Select tables optimized away'和'NULL'行),SORT而且LIMIT仍然需要对索引执行有序遍历(106,000行)。实际的性能影响可能微不足道。

它似乎MIN()是要走的路 - 在最坏的情况下更快,在最好的情况下无法区分标准SQL,并且最明确地表达了您想要获得的价值。正如mson所提到的那样,似乎使用SORT并且LIMIT可取的唯一情况是,你在编写一个从任意列中找到顶部或底部N值的一般操作,并且不值得写出特殊情况操作。


查看完整回答
反对 回复 2019-08-12
?
largeQ

TA贡献2039条经验 获得超7个赞

SELECT MIN(`field`)
FROM `tbl`;

仅仅因为它与ANSI兼容。限制1特别适用于MySql,因为TOP是SQL Server。


查看完整回答
反对 回复 2019-08-12
?
跃然一笑

TA贡献1826条经验 获得超6个赞

MIN是优选的。

ORDER BY + LIMIT有用的另一个原因是,如果要获取与MIN列不同的列的值。

例:

SELECT some_other_field, fieldFROM tblORDER BY field
LIMIT 1


查看完整回答
反对 回复 2019-08-12
  • 3 回答
  • 0 关注
  • 1530 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信