当前位置: 首页 > 面试题库 >

MIN / MAX与ORDER BY和LIMIT

范鸿畅
2023-03-14
问题内容

在以下查询中,您认为哪种方法更好?您的原因是什么(代码效率,更好的可维护性,更少的WTFery)…

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

SELECT `field`
FROM `tbl`
ORDER BY `field`
LIMIT 1;

问题答案:

在最坏的情况下,如果要查看未索引的字段,则使用MIN()需要对表进行一次完整的遍历。使用SORT并且LIMIT需要一个文件排序。如果针对大表运行,则预期的性能可能会存在显着差异。作为无意义的数据点,我的开发服务器上的106,000行表MIN()花了0.36秒SORTLIMIT花了0.84秒。

但是,如果您正在查看索引列,则很难注意到差异(两种情况下无意义的数据点均为0.00s)。但是,查看一下explain的输出,看起来好像MIN()可以简单地从索引中选取最小值(“
Select table Optimized away”和“ NULL”行),而SORTand
LIMIT仍需要对索引进行有序遍历(106,000行)。实际的性能影响可能微不足道。

它看起来像是MIN()要走的路-
在最坏的情况下更快,在最好的情况下没有区别,它是标准SQL,最清楚地表达了您想要获得的价值。正如mson所提到的,似乎唯一希望使用SORT和的LIMIT情况是,您正在编写一个通用运算,该运算从任意列中查找前N个值或后N个值,因此不值得写出特殊情况的操作。



 类似资料:
  • 问题内容: 任何人都可以从官方MySQL文档中澄清这一点 使用索引…查找特定索引列key_col的MIN()或MAX()值。这由预处理器优化,该预处理器检查是否在索引中在key_col之前出现的所有关键部分上使用WHERE key_part_N =常量。在这种情况下,MySQL对每个MIN()或MAX()表达式执行一次键查找,并将其替换为常量。如果所有表达式都用常量替换,查询将立即返回。例如: S

  • 在这个例子中,我们设置整数的最小和最大数字以及数字的小数部分。 IOTester.java import java.text.NumberFormat; import java.util.Locale; public class I18NTester { public static void main(String[] args) { Locale enLocale = new

  • Min 和 Max 函数 在查询时从一组指定字段的值中返回最小或最大值。 语法 Min(expr) Max(expr) 其中 expr 代表一个字符串表达式,它或者标识一个字段,该字段包含要计算的数据;或者是一个表达式,它使用此字段中的数据来执行计算。 expr中的运算对象可能包括一个表字段名,一个常数或一个 函数 (可能是内在的,也可能是用户自定义的,但不是 SQL 合计函数)。 说明 可以使用

  • 问题内容: 我想做一些域验证 在我的对象中,我有一个整数, 现在我的问题是我是否写 和 如果是整数,则哪一个适合域验证。 有人可以解释一下两者之间的区别吗? 谢谢。 问题答案: 和用于验证数字字段,其可以被(代表数字), ,, 等和它们各自的原始包装。 用于检查字段的长度约束。 按照文档的支持,,和而和支持原语及其包装。请参阅文档。

  • 问题内容: 在C / Objective- C中,可以使用MIN和MAX宏在两个数字之间找到最小值和最大值。Swift不支持宏,并且语言/基本库中似乎没有等效项。如果一个去同一个定制的解决方案,也许基于这样的泛型一个? 问题答案: 并且已经在Swift中定义: 请参阅有关Swift中已记录和未记录的内置函数的精彩文章。

  • 问题内容: 我想知道如何将MAX MIN命令与ORMLITE一起使用。 例如,假设我们有此表 Table Name = Example Column 1 = id Column 2 = name 在ORMLITE中,我如何获得最大ID?我看着 这里,但我听不懂。 有人可以向我展示ORMLITE中关于max min的示例吗? 问题答案: QueryBuilder qb = accountDao.qu