MySQL min()/max() 与 order by limit 谁效率高?

yufei       1 周, 5 天 前       48

下面两个 MySQL 谁的效率更高呢?

SELECT MIN(`field`) FROM `tbl`;
SELECT `field` FROM `tbl` ORDER BY `field` LIMIT 1;

这其实是在问一个 o(n)o(nlogn) 哪个更快的问题。

最坏的情况,就是没有对 filed 添加索引的情况下。使用 MIN()MAX() 需要单次读取所有的表数据,而使用 ORDER BY LIMII 则首先需要文件排序。

如果数据量超大,那么性能的差异是很明显的。在我的测试机上 ORDER BY LIMIT 往往需要两倍 MIN()/MAX() 的时间。

但是,如果对 field 字段添加了索引,那么差距就不那么明显了。MIN()/MAX() 可以直接从索引中获取最大值和最小值。但 ORDER BY LIMII 仍然需要对索引进行排序。实际的差异可能就微不足道了。

从上面的论述来看,MIN()/MAX() 可能是更好的选择,因为最坏的情况下它更好,最好的情况下差不多。

更何况 MIN()/MAX() 更能表达我们出 SQL 的原本意思。

ORDER BY LIMIT 的使用场景,应该用来查询 TOP N 或者 LOWER NN > 1 这种数据。也就是说获取前 N 条数据列表这种非特例的操作。

翻译自原文 MIN/MAX vs ORDER BY and LIMIT

目前尚无回复
简单教程 = 简单教程,简单编程
简单教程 是一个关于技术和学习的地方
现在注册
已注册用户请 登入
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2018 简单教程 twle.cn All Rights Reserved.