任何人都可以从官方MySQL文档中澄清这一点
使用索引…查找特定索引列key_col的MIN()或MAX()值。这由预处理器优化,该预处理器检查是否在索引中在key_col之前出现的所有关键部分上使用WHERE
key_part_N
=常量。在这种情况下,MySQL对每个MIN()或MAX()表达式执行一次键查找,并将其替换为常量。如果所有表达式都用常量替换,查询将立即返回。例如:
SELECT MIN(key_part2),MAX(key_part2)FROM tbl_name WHERE key_part1 = 10;
因此,在他们的示例中,他们试图找到称为key_col的col的最小值和最大值。他们使用复合索引key_part1_key_part2吗?索引的key_part2部分代表key_col列吗?
我绝对不明白他们要说的用常量替换表达式的意思。您能帮我解决这一点吗?
更新:
问题不是关于WHERE
语句或索引如何在“最高级别”上工作,如果我能这么说的话。在这个关于MIN和MAX的特定点上,我被处理器的表达式替换物所迷惑。
SELECT MIN(b), MAX(b) FROM tbl WHERE a = 12;
loves
INDEX(a, b)
两列,按此顺序。
查询在索引中查找a = 12
,(a,b)
获取第一个对,获取MIN(b)
最后一个对MAX(b)
。
关于“用常量替换”的说法令人困惑,因为它太深入地介绍了它首先要弄清楚如何执行查询(恰好获得最小值和最大值),然后继续执行剩下的内容的细节。查询(一无所有)。
更一般而言,与使用的常数相比,最佳索引 通常 是从所有WHERE
列开始的索引=
。之后,它变得很复杂,所以让我再给一个提示:
A“覆盖”指标是指具有在所有提到的列SELECT
(a
并b
在我的例子)。
对不起,我似乎没有比手册更清楚的了。
问题内容: 在以下查询中,您认为哪种方法更好?您的原因是什么(代码效率,更好的可维护性,更少的WTFery)… 问题答案: 在最坏的情况下,如果要查看未索引的字段,则使用需要对表进行一次完整的遍历。使用并且需要一个文件排序。如果针对大表运行,则预期的性能可能会存在显着差异。作为无意义的数据点,我的开发服务器上的106,000行表花了0.36秒,花了0.84秒。 但是,如果您正在查看索引列,则很难注
在这个例子中,我们设置整数的最小和最大数字以及数字的小数部分。 IOTester.java import java.text.NumberFormat; import java.util.Locale; public class I18NTester { public static void main(String[] args) { Locale enLocale = new
问题内容: 在C / Objective- C中,可以使用MIN和MAX宏在两个数字之间找到最小值和最大值。Swift不支持宏,并且语言/基本库中似乎没有等效项。如果一个去同一个定制的解决方案,也许基于这样的泛型一个? 问题答案: 并且已经在Swift中定义: 请参阅有关Swift中已记录和未记录的内置函数的精彩文章。
问题内容: 我想做一些域验证 在我的对象中,我有一个整数, 现在我的问题是我是否写 和 如果是整数,则哪一个适合域验证。 有人可以解释一下两者之间的区别吗? 谢谢。 问题答案: 和用于验证数字字段,其可以被(代表数字), ,, 等和它们各自的原始包装。 用于检查字段的长度约束。 按照文档的支持,,和而和支持原语及其包装。请参阅文档。
Min 和 Max 函数 在查询时从一组指定字段的值中返回最小或最大值。 语法 Min(expr) Max(expr) 其中 expr 代表一个字符串表达式,它或者标识一个字段,该字段包含要计算的数据;或者是一个表达式,它使用此字段中的数据来执行计算。 expr中的运算对象可能包括一个表字段名,一个常数或一个 函数 (可能是内在的,也可能是用户自定义的,但不是 SQL 合计函数)。 说明 可以使用
问题内容: 我想知道如何将MAX MIN命令与ORMLITE一起使用。 例如,假设我们有此表 Table Name = Example Column 1 = id Column 2 = name 在ORMLITE中,我如何获得最大ID?我看着 这里,但我听不懂。 有人可以向我展示ORMLITE中关于max min的示例吗? 问题答案: QueryBuilder qb = accountDao.qu