ホームページ > データベース > mysql チュートリアル > 行数に基づいて SELECT ステートメントを組み合わせて MySQL クエリを最適化するにはどうすればよいですか?

行数に基づいて SELECT ステートメントを組み合わせて MySQL クエリを最適化するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-22 21:27:13
オリジナル
866 人が閲覧しました

How Can I Optimize MySQL Queries by Combining SELECT Statements Based on Row Counts?

行数に基づいた 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート