リテラル値が1つの場合のイコール(=)とINの性能差
2023-08-27 18:15:52
質問
等号と IN 演算子が同じ値の場合、SQL エンジンはどのように違うのでしょうか?実行時間は変更されますか?
1つ目の等号チェック演算子を使用した場合
WHERE column_value = 'All'
2つ目は
IN
演算子と単一の値
WHERE column_value IN ('All')
SQLエンジンは変更されますか?
IN
を
=
に変更することはできますか?
MySQLとPostgreSQLで同じような違いがありますか?
どのように解決するのですか?
この2つの記述に違いはなく、オプティマイザーは
IN
を
=
としたとき
IN
には1つの要素しかありません。
このような疑問があるときは、両方の文を実行し、その実行計画を実行して、違いを見てみてください。ここで - あなたは何も見つけることができません。
ネットで大捜索した結果、私は ドキュメント を見つけました (すべての DBMS に適用されると仮定します)。
括弧の中に値が一つしかない場合、このコマンダー [ sic ] と等価です。
WHERE "column_name" = 'value1
以下はOracleでの両方のクエリの実行計画です(ほとんどのDBMSで同じように処理されます)。
EXPLAIN PLAN FOR
select * from dim_employees t
where t.identity_number = '123456789'
Plan hash value: 2312174735
-----------------------------------------------------
| Id | Operation | Name |
-----------------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | TABLE ACCESS BY INDEX ROWID| DIM_EMPLOYEES |
| 2 | INDEX UNIQUE SCAN | SYS_C0029838 |
-----------------------------------------------------
そして
IN()
:
EXPLAIN PLAN FOR
select * from dim_employees t
where t.identity_number in('123456789');
Plan hash value: 2312174735
-----------------------------------------------------
| Id | Operation | Name |
-----------------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | TABLE ACCESS BY INDEX ROWID| DIM_EMPLOYEES |
| 2 | INDEX UNIQUE SCAN | SYS_C0029838 |
-----------------------------------------------------
見ての通り、どちらも同じです。これはインデックス付きカラムでの話です。インデックスがないカラムの場合も同じです(単なるフルテーブルスキャン)。
関連
-
[解決済み] ユニークなテーブル/エイリアスではない
-
MySQL 接続タイムアウト。エラー SQLSTATE[HY000] [2002] 接続がタイムアウトしました 解決済み
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] UNIONとUNION ALLの違いは何ですか?
-
[解決済み] JOINとINNER JOINの違いについて
-
[解決済み] utf8_general_ciとutf8_unicode_ciの違いは何ですか?
-
[解決済み] INNER JOINよりもCROSS APPLYを使用すべきなのはどのような場合ですか?
-
[解決済み] C#で演算子==はジェネリック型に適用できない?
-
[解決済み】「INNER JOIN」と「OUTER JOIN」の違いは何ですか?
-
[解決済み】SQL Serverで既存のテーブルにデフォルト値を持つカラムを追加する
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
MySQLデータ型の詳細
-
MySQLインストールチュートリアル(Windows用)詳細
-
mysqlのデータ圧縮性能比較 詳細
-
[解決済み】MySQL - オペランドは1つのカラムを含む必要があります。
-
[解決済み】MySQL エラー 1093 - FROM 句で更新のターゲット テーブルを指定できません。
-
sql エラーを解決する オペランドには1つの列が含まれている必要があります。
-
Mysql がエラー 1241 を報告 オペランドは 1 つのカラムを含む必要があります。
-
PostMan レポート エラー: 接続 ECONNREFUSED 127.0.0.1:port number
-
[解決済み] INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOINの違いは何ですか?[重複しています]。
-
[解決済み] SQLでカラムに最大値を持つ行のみを選択する [重複]。