Wenn ich einer MySQL-Abfrage LIMIT 1 hinzufüge, stoppt es die Suche, nachdem es 1 Ergebnis gefunden hat (wodurch es schneller wird), oder ruft es immer noch alle Ergebnisse ab und schneidet sie am Ende ab?
Wenn ich einer MySQL-Abfrage LIMIT 1 hinzufüge, stoppt es die Suche, nachdem es 1 Ergebnis gefunden hat (wodurch es schneller wird), oder ruft es immer noch alle Ergebnisse ab und schneidet sie am Ende ab?
Antworten:
Abhängig von der Abfrage kann das Hinzufügen einer Limit-Klausel einen großen Einfluss auf die Leistung haben. Wenn Sie nur eine Zeile möchten (oder wissen möchten, dass nur eine Zeile die Abfrage erfüllen kann) und nicht sicher sind, wie der interne Optimierer sie ausführen wird (z. B. WHERE-Klausel, die keinen Index trifft usw.), dann Sie sollten auf jeden Fall eine LIMIT-Klausel hinzufügen.
Bei optimierten Abfragen (unter Verwendung von Indizes für kleine Tabellen) spielt die Leistung wahrscheinlich keine große Rolle, aber auch hier gilt: Wenn Sie nur an einer Zeile interessiert sind, fügen Sie trotzdem eine LIMIT-Klausel hinzu.
Das Limit kann die Leistung der Abfrage beeinträchtigen (siehe Kommentare und den folgenden Link) und die von MySQL ausgegebene Ergebnismenge reduzieren. Für eine Abfrage, bei der Sie ein einzelnes Ergebnis erwarten, ergeben sich Vorteile.
Darüber hinaus kann die Begrenzung der Ergebnismenge die Gesamtabfragezeit beschleunigen, da beim Übertragen großer Ergebnismengen Speicher verwendet wird und möglicherweise temporäre Tabellen auf der Festplatte erstellt werden. Ich erwähne dies, da ich kürzlich eine Anwendung gesehen habe, die aufgrund großer Ergebnismengen kein Limit-Kill-System verwendet hat und bei vorhandenem Limit die Ressourcennutzung enorm gesunken ist.
Weitere Einzelheiten finden Sie auf dieser Seite: MySQL-Dokumentation: LIMIT-Optimierung
Wenn nur 1 Ergebnis zurückkommt, wird LIMIT es nicht schneller machen. Wenn es viele Ergebnisse gibt und Sie nur das erste Ergebnis benötigen und es keine GROUP- oder ORDER by-Anweisungen gibt, wird es durch LIMIT schneller.
Kurz gesagt lautet die Antwort ja. Wenn Sie Ihr Ergebnis auf 1 beschränken, ist die Abfrage auch dann schneller, wenn Sie ein Ergebnis "erwarten", da Ihre Datenbank nicht alle Ihre Datensätze durchsucht. Es wird einfach angehalten, sobald ein Datensatz gefunden wurde, der Ihrer Abfrage entspricht.
Wenn Sie wirklich nur ein einziges Ergebnis erwarten, ist es wirklich sinnvoll, das LIMIT an Ihre Abfrage anzuhängen. Ich kenne das Innenleben von MySQL nicht, aber ich bin sicher, dass es keine Ergebnismenge von über 100'000 + Datensätzen sammelt, nur um es am Ende wieder auf 1 zu kürzen.
UNIQUE
(oderPRIMARY KEY
) Einschränkung (oder einen Index) aufweist. stackoverflow.com/questions/8467092/…