回答

收藏

MIN和MAX的MySQL索引

技术问答 技术问答 237 人阅读 | 0 人回复 | 2023-09-14

任何人都可以从官方开始MySQL文件中澄清了这一点0 C6 i3 z# o% i! d" A0 r5 p- T
使用索引…找到特定的索引列key_col的MIN()或MAX()值。这是由预处理器优化的,检查预处理器是否在索引中key_col使用之前出现的所有关键部分WHERE
) ^! O" ^/ P% n& ]key_part_N
5 l3 ^# k' W+ f- Z( C( l* C=常量。MySQL对每个MIN()或MAX()表达式执行一次键搜索,并用常量替换。如果所有表达式都用常量替换,查询将立即返回。
  ^: ?" k/ N& K6 A: |. T; q7 v3 ~SELECT MIN(key_part2),MAX(key_part2)FROM tbl_name WHERE key_part1 = 10;
" ?8 g" r  f) u9 v0 z
因此,在他们的例子中,他们试图找到名字key_col的col最小值和最大值。它们使用复合索引key_part1_key_part2吗?索引的key_part2部分代表key_col列吗?
+ a+ U1 _: C7 H! t我绝对不明白他们用常量代替表达式的意思。你能帮我解决这个问题吗?
8 Q& z. t, X+ ^+ p6 P! x/ d1 b9 a更新:/ b, Y& c. [- x; }0 c6 S
问题不是关于的WHERE如果我能这么说,语句或索引是如何在最高级别工作的。关于这个MIN和MAX在特定点上,我被处理器的表达替换所迷惑。
0 h2 z/ L3 C8 [4 E* q                                                               
  \3 R" a1 Z" ~$ V7 y* b    解决方案:                                                               
1 W" B0 H: h4 ?0 {                                                                SELECT MIN(b),MAX(b) FROM tbl WHERE a = 12;
* t! @% P1 k: ?$ @2 Z) floves9 b$ D' m# g- Q
INDEX(a,b)按此顺序,两列。
6 h+ }3 `3 M7 H( C1 G" q8 ~! w" I在索引中查询a = 12,(a,b)获得第一对,获得MIN(b)最后一个对MAX(b)。* Z- U& ], Z/ ?0 P8 B, M; m
关于常量替换的说法令人困惑,因为它深入介绍了如何执行查询(只是获得最小值和最大值),然后继续执行剩余内容的细节。查询(一无所有)。
' ?- y+ z+ X9 z& a% ?+ d0 u+ m一般来说,与常数相比,最佳索引 通常    是从所有WHERE列开始索引=。之后,它变得很复杂,所以让我再给一个提示:' c. r# j5 |, k$ f& v
A覆盖指标是指所有提到的列SELECT(a并b以我为例)。& R9 ]5 |( p9 t7 X# f9 _
对不起,我似乎不比手册更清楚。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则