Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Index für MIN und MAX

SELECT MIN(b), MAX(b) FROM tbl WHERE a = 12;

liebt

INDEX(a, b)

beide Spalten in dieser Reihenfolge.

Die Abfrage sucht im Index nach a = 12 , greift den ersten (a,b) paaren, um MIN(b) zu erhalten und schnappt sich das letzte Paar, um MAX(b) zu erhalten .

Die Aussage über das "Ersetzen durch eine Konstante" ist verwirrend, weil sie zu tief in die Details geht, wie sie zuerst herausfindet, wie die Abfrage durchgeführt wird (was zufällig das Minimum und das Maximum erhält), und dann mit der Ausführung fortfährt, was übrig bleibt die Abfrage (es bleibt nichts übrig).

Allgemeiner gesagt ist der optimale Index normalerweise eine, die mit allen WHERE beginnt Spalten im Vergleich zu Konstanten mit = . Danach wird es komplex, also gebe ich noch einen Tipp:

Ein "überdeckender" Index ist einer, der alle in SELECT erwähnten Spalten enthält (a und b in meinem Beispiel).

Entschuldigung, ich scheine nicht klarer zu sein als das Handbuch.