Ich bin heute auf ein Problem gestoßen, das heißt, es gibt eine Abfrage, die die Ergebnismenge in der Reihenfolge des angegebenen ID-Werts zurückgeben muss. Tatsächlich kann sie auch zum Sortieren in das Programm eingefügt werden, aber ich wollte es plötzlich sehen Wenn ich MySQL direkt zum Abfragen und Zurückgeben verwenden könnte, suche ich nach Hilfe bei der Funktionsimplementierung.
Field()-Funktion
Mysql bietet eine Funktion Field(), die die Sortierung entsprechend der von uns vorgegebenen Reihenfolge anpassen kann
Beispiel:
Angenommen, es gibt eine Stadtinformationstabelle namens Regionen mit der Primärschlüssel-ID und Ein Namensattributname, jetzt möchte ich die IDs 2, 3, 1 abfragen und sie in dieser Reihenfolge zurückgeben
<p>select id, name from regions;#id name<br> 1 北京 2 上海 3 深圳<br></p>
Denn wenn wir „Order By Field“ verwenden, geben wir an, dass der Primärschlüssel nach der Primärschlüssel-ID sortiert wird. Es wird die ID verwendet, um Datensätze mit den Bedingungen 2, 3, 1 zu finden Sie können also sehen, dass es in Extra einen Using-Index gibt. Wenn Sie zu einem anderen nicht indizierten Feld wechseln, ist dieser nicht vorhanden. Die Order By-Klausel kann diesen Index nicht verwenden und kann nur die Filesort-Sortierung verwenden. Deshalb gibt es „Filesort verwenden“ in „Extra“. Der ungefähre Vorgang ist wie folgt: „Beginnen Sie mit dem ersten Blattknoten des ID-Index und scannen Sie alle.“ Blattknoten der Reihe nach
Gehen Sie zum Primärschlüsselindex (Clustered-Index) entsprechend der in jedem Blattknoten aufgezeichneten Primärschlüssel-ID, um die tatsächlichen Zeilendaten zu findenBestimmen Sie, ob die Zeilendaten die Bedingungen von id = 2, 3, 1 erfüllen. Wenn es zutrifft, nehmen Sie es heraus und kehren Sie zurück
Grundprinzipien Nach dem Durchlaufen der gesamten Tabelle sagten einige Leute, dass es nach der ID des ausgewählten Datensatzes in der FELD-Liste sucht und die Position zurückgibt, wobei die Position als Sortierbasis verwendet wird. Eine solche Verwendung führt zur Verwendung von Filesort (natürlich ist die Verwendung von Filesort nicht unbedingt langsamer, manchmal ist es schneller, als es nicht zu verwenden), was eine sehr ineffiziente Sortiermethode ist.
Normalerweise wird die ORDER BY-Klausel mit der LIMIT-Klausel kombiniert, um nur einen Teil der Zeilen abzurufen. Wenn Sie alle Zeilen sortieren, nur um die oberste Zeile herauszunehmen, ist dies offensichtlich kein effizienter Ansatz. Die FunktionSummary
Field() kann uns dabei helfen, einige erforderliche Sortierungen direkt auf der Datenbankebene durchzuführen und den Geschäftscode zu vereinfachen. Es wird jedoch empfohlen, sie zu verwenden, wenn Die Häufigkeit der Datenänderungen ist gering oder der Datencache ist lang. Wenn die Datenmenge groß ist, können Sie die Daten mithilfe der Datenbank abfragen und im Programm sortieren. Empfohlenes Lernen: „MySQL-Video-Tutorial.“ "
Das obige ist der detaillierte Inhalt vonIn diesem Artikel wird erläutert, wie MySQL Ergebnisse basierend auf der Reihenfolge der ID-Werte zurückgibt.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!