これらの2つの文には違いはなく、IN
に要素が1つしかない場合、オプティマイザはIN
を=
に変換します。
このような質問がある場合は、両方のステートメントを実行して実行計画を実行し、その違いを確認してください。ここには何も見つかりません。括弧内の一つの値だけがある場合は、この称賛は同等です
:
は、オンラインで大きな検索した後、私はこれを(私はそれがすべてのDBMSに適用されると仮定)をサポートするためにSQL上のドキュメントを見つけました
"COLUMN_NAME" =「VALUE1
Here is the link to the document。ここで
は、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 |
-----------------------------------------------------
あなたが見ることができるように、両者が同一であり、 。これは索引付けされた列にあります。索引付けされていない列についても同様です(全表スキャンのみ)。
何百万というルールを学習しようとしないでください。何らかの意味で、常に最高のパフォーマンスを発揮するコードを書くことになります。明らかに正しい結果を生み出す明確でシンプルな*理解可能な*コードを書いてください。パフォーマンス目標を設定します。 *あなたのコードのパフォーマンスを測定*します。それが適切に実行されたら、動いてください。それが上手くいかない場合にのみ、あなたはそれにもっと時間を費やすべきです。そして、その時、あなたの質問のような些細な変化を試してから、もう一度*測定*するのは簡単です。おそらく1つは他のものより速いですが、それは重要な違いを生みますか?* –
合意@Damien_The_Unbeliever。しかし、時には、私はSQLとの単一行または単語を書く間、より心配している –
彼らは同じ99.9999999%です。 'WHERE column_value IN((value = 'All' limit 1)のlist_of_valuesから値を選択してください)'のようなことをしない限り、あなたは大丈夫です。サブクエリは 'in()'節のパフォーマンスに大きな影響を与えます。 – MonkeyZeus