SELECT MIN(b), MAX(b) FROM tbl WHERE a = 12;
älskar
INDEX(a, b)
båda kolumnerna, i den ordningen.
Frågan letar efter a = 12
i indexet , tar tag i den första (a,b)
para för att få MIN(b)
och tar det sista paret för att få MAX(b)
.
Uttalandet om att "ersätta med en konstant" är förvirrande eftersom det går för djupt in i detaljerna om hur det först tar reda på hur man utför frågan (som råkar få min och max), sedan fortsätter med att exekvera det som finns kvar av frågan (ingenting finns kvar).
Mer generellt är det optimala indexet vanligtvis en som börjar med alla WHERE
kolumner jämfört med konstanter med =
. Efter det blir det komplicerat, så låt mig ge ett annat tips:
Ett "täckande" index är ett som har alla kolumner som nämns i SELECT
(a
och b
i mitt exempel).
Tyvärr, jag verkar inte vara tydligare än manualen.