行数に基づいた SELECT クエリの結合
PHP では、データベース クエリを最適化することでスクリプトのパフォーマンスを向上させることができます。 1 つの手法は、最初の SELECT クエリがゼロ行を返した場合に条件付きで 2 番目の SELECT クエリを実行することで、ロジックを MySQL にプッシュすることです。
次の例を考えてみましょう。
SELECT * FROM proxies WHERE (A='B') || SELECT * FROM proxies WHERE (A='C')
このコードは、最初のクエリの結果。
より良いアプローチは、次のように MySQL の条件付き実行機能を使用することです。コード:
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 回実行されます。
より効率的な解決策は、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' )
このクエリは、A='B' の行が存在する場合はそれらを取得し、存在しない場合は A='C' の行を取得します。 EXISTS 条件を使用すると、クエリは最初に指定された条件 (A='B') が存在する場合にのみ行を取得するため、count クエリが 1 回実行されます。
SQL Fiddle Demo: https:/ /www.sqlfiddle.com/#!9/3de314
以上が行数に基づいて SELECT ステートメントを組み合わせて MySQL クエリを最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。