MySQL 的 MIN 和 MAX 索引

2024-04-04

谁能从官方 MySQL 中澄清这一点文档 https://dev.mysql.com/doc/refman/5.7/en/mysql-indexes.html

使用索引...查找特定索引列 key_col 的 MIN() 或 MAX() 值。这是由预处理器优化的,该预处理器检查您是否在索引中 key_col 之前出现的所有关键部分上使用 WHERE key_part_N =constant。在这种情况下,MySQL 对每个 MIN() 或 MAX() 表达式进行单键查找,并将其替换为常量。如果所有表达式都替换为常量,则查询立即返回。例如:从 tbl_name 中选择 MIN(key_part2),MAX(key_part2),其中 key_part1=10;

因此,在他们的示例中,他们试图找到名为 key_col 的 col 的最小值和最大值。他们使用复合索引 key_part1_key_part2 吗?索引的 key_part2 部分是否代表 key_col 列?

我完全不明白他们用常量替换表达式的意思。你能帮我解决这一点吗?

UPDATE:问题不在于如何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).

关于“用常量替换”的声明令人困惑,因为它过于深入地了解如何首先弄清楚如何执行查询(恰好获得最小值和最大值),然后继续执行剩下的内容的细节查询(什么都没有剩下)。

更一般地,最优索引是usually一个以所有开头的WHERE列与常量相比=。之后它会变得复杂,所以让我再给出另一个提示:

“覆盖”索引是指包含索引中提到的所有列的索引。SELECT (a and b在我的例子中)。

抱歉,我似乎没有比手册更清楚。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL 的 MIN 和 MAX 索引 的相关文章

随机推荐