ホームページ >データベース >mysql チュートリアル >MySQL で UNION と LIMIT を効率的に組み合わせて複数のテーブルからデータを取得する方法
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 サイトの他の関連記事を参照してください。