Antworten:
Im schlimmsten Fall, wenn Sie ein nicht indiziertes Feld betrachten, MIN()erfordert die Verwendung einen einzigen vollständigen Durchlauf der Tabelle. Verwenden SORTund LIMITerfordert eine Dateisortierung. Wenn Sie gegen einen großen Tisch laufen, gibt es wahrscheinlich einen signifikanten Unterschied in der wahrgenommenen Leistung. Als bedeutungsloser Datenpunkt MIN()dauerte es 0,36 Sekunden SORTund LIMIT0,84 Sekunden für eine 106.000-Zeilen-Tabelle auf meinem Entwicklungsserver.
Wenn Sie jedoch eine indizierte Spalte betrachten, ist der Unterschied schwerer zu bemerken (der bedeutungslose Datenpunkt beträgt in beiden Fällen 0,00 s). Wenn man sich die Ausgabe von EXPLAIN ansieht, sieht es jedoch so aus, als könnte MIN()man einfach den kleinsten Wert aus dem Index (Zeilen "Ausgewählte Tabellen auswählen" und "NULL") abrufen, während das SORTund LIMITnoch eine geordnete Durchquerung des Index durchführen muss (106.000 Zeilen). Die tatsächlichen Auswirkungen auf die Leistung sind wahrscheinlich vernachlässigbar.
Es sieht so aus, als wäre MIN()es der richtige Weg - es ist im schlimmsten Fall schneller, im besten Fall nicht zu unterscheiden, es ist Standard-SQL und drückt am deutlichsten den Wert aus, den Sie erreichen möchten. Der einzige Fall, in dem die Verwendung von SORTund LIMITwünschenswert erscheint, ist, wie bereits erwähnt, der Fall , in dem Sie eine allgemeine Operation schreiben, bei der die oberen oder unteren N-Werte aus beliebigen Spalten ermittelt werden, und es sich nicht lohnt, die Sonderfalloperation aufzuschreiben .
SELECT MIN(`field`)
FROM `tbl`;
Einfach weil es ANSI-kompatibel ist. Limit 1 gilt speziell für MySQL, ebenso wie TOP für SQL Server.
Wie mson und Sean McSomething betont haben, ist MIN vorzuziehen.
Ein weiterer Grund, warum ORDER BY + LIMIT nützlich ist, ist, wenn Sie den Wert einer anderen Spalte als der MIN-Spalte abrufen möchten.
Beispiel:
SELECT some_other_field, field
FROM tbl
ORDER BY field
LIMIT 1
Ich denke, die Antworten hängen davon ab, was Sie tun.
Wenn Sie eine 1-Aus-Abfrage haben und die Absicht so einfach ist, wie Sie angegeben haben, ist die Auswahl von min (Feld) vorzuziehen.
Es ist jedoch üblich, dass sich diese Arten von Anforderungen in Top-N-Ergebnisse, N-N-M-Ergebnisse usw. ändern.
Ich denke nicht, dass es eine zu schreckliche Idee ist, sich auf die von Ihnen gewählte Datenbank festzulegen. Das Ändern von DBS sollte nicht leichtfertig vorgenommen werden und muss den Preis, den Sie bei diesem Schritt zahlen, ändern.
Warum beschränken Sie sich jetzt auf Schmerzen, die Sie später möglicherweise spüren oder nicht?
Ich denke, es ist gut, ANSI so weit wie möglich zu bleiben, aber das ist nur eine Richtlinie ...
Bei akzeptabler Leistung würde ich die erste verwenden, da sie der Absicht semantisch näher kommt.
Wenn die Leistung ein Problem wäre (die meisten modernen Optimierer optimieren wahrscheinlich beide auf denselben Abfrageplan, obwohl Sie testen müssen, um dies zu überprüfen), würde ich natürlich den schnelleren verwenden.