ホームページ >データベース >mysql チュートリアル >WHERE IN (サブクエリ) クエリは遅いのに、サブクエリからのビューの参照は速いのはなぜですか?

WHERE IN (サブクエリ) クエリは遅いのに、サブクエリからのビューの参照は速いのはなぜですか?

DDD
DDDオリジナル
2024-11-19 21:40:03517ブラウズ

Why is my WHERE IN (subquery) query slow, but referencing a view from the subquery is fast?

MySQL パフォーマンスの難題: サブクエリのパフォーマンス異常

データベースから重複レコードを取得しようとすると、SQL クエリがサブクエリを使用してレコードを識別します。関連する行では、驚くべきパフォーマンスの差異が見られました。

特定のフィールドでグループ化およびフィルター処理することで重複レコードを効果的に分離する最初のクエリは、迅速に実行されました。ただし、重複セットからの値と一致する値を持つすべての行を取得しようとする後続のクエリ (WHERE ... IN (サブクエリ) 構造を使用して実現) が非常に遅くなりました。

関連するフィールドでは、実行が完了するまでに数分かかりました。データベースの制限を疑って、サブクエリからビューが作成され、代わりにビューを参照するように親クエリが変更されました。これにより、ほぼ瞬時に実行されました。

犯人の解明: 相関クエリの問題

調査の結果、パフォーマンスの低下は、クエリの相関特性に起因することが判明しました。サブクエリ。相関サブクエリでは、内部クエリが外部クエリのフィールドを参照するため、外部クエリの行ごとにサブクエリが複数回実行され、効率が低下します。

ボトルネックの解決: 分離サブクエリ

パフォーマンスの低下を軽減するために、サブクエリからすべての列を選択し、エイリアスを割り当てることで、相関サブクエリが非相関サブクエリに変換されました。これにより、サブクエリの実行が 1 回だけ実行されるようになり、クエリのパフォーマンスが大幅に向上しました。

変更された親クエリは、相関関係のないサブクエリの結果を参照するようになり、望ましい効率で実行され、パフォーマンスの問題が解決されました。

以上がWHERE IN (サブクエリ) クエリは遅いのに、サブクエリからのビューの参照は速いのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。