[解決済み] サブクエリ vs ジョイン
2022-04-25 18:23:11
質問
他社から引き継いだアプリケーションの遅い部分をリファクタリングして、サブクエリではなく内部結合を使うようにしました。
WHERE id IN (SELECT id FROM ...)
リファクタリング後のクエリは約100倍高速に実行されます。 (~50 秒から ~0.3 秒) 改善されることは予想していましたが、なぜそんなに劇的に改善されたのか説明できる人はいますか?where節で使用したカラムはすべてインデックス付きでした。SQLはwhere句のクエリを行ごとに1回ずつ実行するのか、それとも何かですか?
更新 - 結果を説明する。
違いは、quot;where id in ()"クエリの2番目の部分です - 。
2 DEPENDENT SUBQUERY submission_tags ref st_tag_id st_tag_id 4 const 2966 Using where
vs 結合でインデックスされた1行。
SIMPLE s eq_ref PRIMARY PRIMARY 4 newsladder_production.st.submission_id 1 Using index
解決方法は?
相関性のあるサブクエリ(where condition)は、各行ごとに1回ずつ実行されます。非相関サブクエリ(where条件が含むクエリから独立しているもの)は、最初に一度だけ実行されます。SQLエンジンは、この区別を自動的に行います。
でも、そうだな、explainを使えば、汚い情報も教えてくれる。
関連
-
SQL-初心者のためのベスト入門SQLクエリ I
-
[解決済み] 明示的なSQLの結合と暗黙的なSQLの結合
-
[解決済み] INNER JOIN ON vs WHERE句
-
[解決済み] postgres: ユーザーをスーパーユーザーにアップグレードしますか?
-
[解決済み] PostgreSQLで一重引用符で囲まれたテキストを挿入する
-
[解決済み] SQL Serverで結果をページ分割する最も良い方法は何ですか?
-
[解決済み] DISTINCTでCOUNT(*)を選択する
-
[解決済み] T-SQL文の接頭辞Nの意味と使うべきタイミングは?
-
[解決済み] 別のテーブルに一致する項目がない行を選択するにはどうすればよいですか?
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Oracle Trigger ORA-04098: トリガーが無効で、再バリデーションに失敗しました。
-
[解決済み] SQLテーブルで重複する値を検索する
-
[解決済み] 各GROUP BYグループの最初の行を選択しますか?
-
[解決済み] SQLのSELECTでIF...THENを実行するにはどうすればよいですか?
-
[解決済み] 各グループの最後のレコードを取得する - MySQL
-
[解決済み] カラム名の変更 SQL Server 2008
-
[解決済み] SQL ServerにおけるINSERT OR UPDATEに関する解決策
-
[解決済み] SQLiteデータベースで、一度に複数行を挿入することは可能ですか?
-
[解決済み】ジョインとサブクエリの比較
-
[解決済み] MySQL - SELECT WHERE field IN (サブクエリ) - 極端に遅いのはなぜ?