最初のクエリ結果に基づく条件付きクエリの実行
さまざまなデータベース最適化シナリオでは、次の結果に基づいてさまざまなクエリを実行する必要が生じます。最初のクエリ。これは、最初のクエリが行を返さなかった場合にのみ 2 番目のクエリを実行する必要がある場合に発生する可能性があります。
問題ステートメント
MySQL 環境では、次のシナリオを考慮してください。特定の条件に基づいて「プロキシ」テーブルからデータを効率的に取得したい。ただし、最初のクエリが行を返さない場合は、別のクエリを実行する必要があります。
条件付き IF ステートメントを使用した初期試行
このシナリオに対処する 1 つの一般的なアプローチは次のとおりです。条件付き IF ステートメントを使用するには:
IF (SELECT COUNT(*) FROM proxies WHERE A='B') > 0 THEN SELECT * FROM proxies WHERE A='B' ELSEIF (SELECT COUNT(*) FROM proxies WHERE A='C') > 0 THEN SELECT * FROM proxies WHERE A='C' END IF;
ただし、このアプローチでは、基礎となるデータベースに次のような処理が必要になるため、非効率的です。 COUNT(*) クエリを 2 回実行します。1 回目は行数を確認し、もう 1 回目は実際のデータを取得します。
UNION ALL と EXISTS を使用した最適化されたソリューション
最適化するにはこのプロセスでは、MySQL は UNION ALL 演算子を EXISTS と組み合わせて使用する、より効率的なソリューションを提供します。句:
SELECT * FROM proxies WHERE A='B' UNION ALL SELECT * FROM proxies WHERE A='C' AND NOT EXISTS ( SELECT 1 FROM proxies WHERE A='B' );
この最適化されたクエリは次の手順を実行します:
この最適化されたアプローチでは、次のような問題が回避されます。冗長クエリ実行の必要性がなくなり、条件付きクエリ実行の効率が大幅に向上します。
以上が最初のクエリの結果に基づいて MySQL で条件付きクエリを効率的に実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。