MySQL-Abfragen optimieren: UNION und LIMIT für den Datenabruf aus mehreren Tabellen kombinieren
Das Abrufen von Daten aus mehreren Tabellen erfordert häufig das Kombinieren von Ergebnissen mit UNION
und das Begrenzen der Anzahl der Zeilen mit LIMIT
. Dieser Leitfaden zeigt einen effizienten Ansatz, um dies zu erreichen.
Stellen Sie sich ein Szenario vor, in dem Sie insgesamt 20 Stellenangebote von zwei bestimmten Unternehmen extrahieren müssen, mit maximal 10 Stellen pro Unternehmen. Die folgende optimierte Abfrage erreicht dies:
<code class="language-sql">( SELECT c.name, j.title, j.`desc`, j.link FROM jobs_job j INNER JOIN companies_company c ON j.company_id = c.id WHERE c.name = 'Company1' ORDER BY name, title LIMIT 0, 10 ) UNION ALL ( SELECT c.name, j.title, j.`desc`, j.link FROM jobs_job j INNER JOIN companies_company c ON j.company_id = c.id WHERE c.name = 'Company2' ORDER BY name, title LIMIT 0, 10 )</code>
Der Schlüssel zur Effizienz liegt darin, LIMIT
innerhalb jeder einzelnen SELECT
-Aussage zu platzieren. Dadurch wird sichergestellt, dass die Ergebnisse jedes Unternehmens unabhängig voneinander auf 10 Zeilen begrenzt werden. Der UNION ALL
-Operator (hier aus Geschwindigkeitsgründen verwendet; UNION
würde Duplikate entfernen) kombiniert dann diese begrenzten Ergebnismengen und garantiert so ein Maximum von 20 Zeilen in der endgültigen Ausgabe.
Die ORDER BY
-Klausel in jeder Unterabfrage verwaltet sortierte Ergebnisse nach Firmenname und Berufsbezeichnung vor der Gewerkschaftsoperation. Dadurch wird sichergestellt, dass der endgültige kombinierte Ergebnissatz sortiert bleibt. Diese Methode ist weitaus effizienter als die Anwendung von LIMIT
nach dem UNION
-Vorgang, der die Verarbeitung aller Ergebnisse vor der Anwendung des Grenzwerts erfordern würde.
Das obige ist der detaillierte Inhalt vonWie kann man UNION und LIMIT in MySQL effizient kombinieren, um Daten aus mehreren Tabellen abzurufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!