最佳化 MySQL 查詢:結合 UNION 和 LIMIT 進行多表資料擷取
從多個表中檢索資料通常需要使用 UNION
組合結果並使用 LIMIT
限制行數。 本指南演示了實現此目標的有效方法。
考慮這樣一個場景,您需要從兩家特定公司中提取總共 20 個職位列表,每個公司最多 10 個職位。 以下最佳化查詢可實現此目的:
<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>
效率的關鍵在於將LIMIT
放在每個單獨的SELECT
語句中。這可確保每家公司的結果獨立限制為 10 行。 然後,UNION ALL
運算子(此處用於提高速度;UNION
將刪除重複項)組合這些有限的結果集,保證最終輸出中最多包含 20 行。
每個子查詢中的 ORDER BY
子句在聯合操作之前維護按公司名稱和職位排序的結果。 這確保了最終組合結果集保持排序。 此方法比在 LIMIT
操作之後應用 UNION
更有效,後者需要在應用限制之前處理所有結果。
以上是MySQL中如何有效率地組合UNION和LIMIT從多個表中擷取資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!