Optimierung von MySQL-Abfragen mit UNION und LIMIT für unternehmensübergreifende Jobsuchen
Effizienter Datenabruf aus großen Datenbanken erfordert eine sorgfältige Abfragekonstruktion. In diesem Beispiel geht es darum, Stellenangebote von mehreren Unternehmen abzurufen und die Ergebnisse auf maximal 10 Stellen pro Unternehmen zu beschränken.
Ein naiver Ansatz, der UNION DISTINCT
mit einer einzigen LIMIT
-Klausel verwendet, schränkt die Gesamtzahl der Ergebnisse ein, nicht die Ergebnisse pro Unternehmen. Die Lösung liegt in der Anwendung von ORDER BY
und LIMIT
innerhalb jeder einzelnen SELECT
-Anweisung der UNION
-Abfrage:
<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 IN ('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 IN ('Company2') ORDER BY name, title LIMIT 0, 10 );</code>
Diese überarbeitete Abfrage stellt sicher, dass die LIMIT
-Klausel unabhängig auf die Jobdaten jedes Unternehmens wirkt und bis zu 10 Jobs pro Unternehmen zurückgibt. Beachten Sie die Verwendung von UNION ALL
, die im Allgemeinen effizienter ist als UNION DISTINCT
, es sei denn, eindeutige Ergebnisse sind ausdrücklich erforderlich. Dieser Ansatz behandelt Fälle, in denen ein Unternehmen weniger als 10 Arbeitsplätze hat, und gibt alle verfügbaren Arbeitsplätze für dieses Unternehmen zurück.
Für mehr Flexibilität und komplexere Szenarien sollten Sie die Nutzung der ROW_NUMBER()
Fensterfunktion von MySQL in Betracht ziehen. ROW_NUMBER()
weist jeder Zeile innerhalb einer definierten Partition (in diesem Fall pro Unternehmen) einen eindeutigen Rang zu und ermöglicht so eine ausgefeilte Filterung und Gruppierung der Ergebnisse.
Das obige ist der detaillierte Inhalt vonWie können die Ergebnisse pro Unternehmen bei der Verwendung von UNION in MySQL effizient begrenzt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!