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

MIN/MAX vs. ORDER BY und LIMIT

Im schlimmsten Fall, wenn Sie ein nicht indiziertes Feld betrachten, verwenden Sie MIN() erfordert einen einzigen vollständigen Durchlauf des Tisches. Mit SORT und LIMIT erfordert eine Dateisortierung. Wenn es gegen eine große Tabelle laufen würde, würde es wahrscheinlich einen signifikanten Unterschied in der wahrgenommenen Leistung geben. Als anekdotischer Datenpunkt MIN() dauerte 0,36 Sekunden beim SORT und LIMIT dauerte 0,84 Sekunden gegen eine Tabelle mit 106.000 Zeilen auf meinem Entwicklungsserver.

Wenn Sie sich jedoch eine indizierte Spalte ansehen, ist der Unterschied schwerer zu erkennen (bedeutungsloser Datenpunkt ist in beiden Fällen 0,00 s). Betrachtet man jedoch die Ausgabe von EXPLAIN, so sieht sie aus wie MIN() ist in der Lage, einfach den kleinsten Wert aus dem Index zu pflücken ('Tabellen auswählen, wegoptimiert' und 'NULL'-Zeilen), während SORT und LIMIT muss noch eine geordnete Traversierung des Index (106.000 Zeilen) durchführen. Die tatsächliche Auswirkung auf die Leistung ist wahrscheinlich vernachlässigbar.

Es sieht aus wie MIN() ist der richtige Weg - es ist im schlimmsten Fall schneller, im besten Fall nicht unterscheidbar, ist Standard-SQL und drückt am deutlichsten den Wert aus, den Sie erzielen möchten. Der einzige Fall, in dem es scheint, dass SORT verwendet wird und LIMIT Wünschenswert wäre, wie mson erwähnt, wo Sie eine allgemeine Operation schreiben, die die oberen oder unteren N-Werte aus beliebigen Spalten findet, und es sich nicht lohnt, die Spezialfalloperation aufzuschreiben.