Where 句を使用した効率的な MySQL 結合の実行
MySQL でテーブルを結合する場合、結合句と Where 句の間のニュアンスを理解することが、目的を達成するために重要です。最適なクエリパフォーマンス。 user_category_subscriptions テーブル内の特定のユーザーが購読しているカテゴリを含む、カテゴリ テーブルからすべてのカテゴリを取得するシナリオを考えてみましょう。左結合を使用した最初のクエリ:
SELECT * FROM categories LEFT JOIN user_category_subscriptions ON user_category_subscriptions.category_id = categories.category_id
このクエリはすべてのカテゴリを収集しますが、サブスクライブされたカテゴリに基づいてさらにフィルタリングするには、where 句を追加したくなるかもしれません:
SELECT * FROM categories LEFT JOIN user_category_subscriptions ON user_category_subscriptions.category_id = categories.category_id WHERE user_category_subscriptions.user_id = 1
ただし、ここで where 句を使用するのは非効率です。代わりに、この句は join 句内に配置する必要があります。
SELECT * FROM categories LEFT JOIN user_category_subscriptions ON ( user_category_subscriptions.category_id = categories.category_id AND user_category_subscriptions.user_id = 1 )
join 句は、カテゴリに結合される user_category_subscriptions のサブセットを定義します。結合条件で user_id を指定すると、指定したユーザーが購読しているカテゴリのみが出力に含まれるようになります。このアプローチは、不必要な数の行のフェッチとフィルタリングを回避できるため、where 句を使用するよりもはるかに効率的です。
以上が結果をフィルタリングする際のパフォーマンスを向上させるために MySQL 結合を最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。