ホームページ >データベース >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 で行数を制限する必要があります。 このガイドでは、これを達成するための効率的なアプローチを説明します。

特定の 2 社から合計 20 件の求人情報を抽出する必要があるシナリオを考えてみましょう。1 社あたり最大 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。