首頁 >資料庫 >mysql教程 >MySQL中如何有效率地組合UNION和LIMIT從多個表中擷取資料?

MySQL中如何有效率地組合UNION和LIMIT從多個表中擷取資料?

Susan Sarandon
Susan Sarandon原創
2025-01-14 13:06:43397瀏覽

How to Efficiently Combine UNION and LIMIT in MySQL to Retrieve Data from Multiple Tables?

最佳化 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn