谁能从官方 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(使用前将#替换为@)