sql >> データベース >  >> RDS >> Mysql

等しい(=)と1つのリテラル値を持つINのパフォーマンスの違い

    これらの2つのステートメントに違いはなく、オプティマイザーはINを変換します =INの場合 要素が1つだけあります。

    ただし、このような質問がある場合は、両方のステートメントを実行し、実行プランを実行して、違いを確認してください。ここでは、何も見つかりません。

    オンラインで大規模な検索を行った後、ドキュメント を見つけました。 これをサポートするSQLで(すべてのDBMSに適用されると思います):

    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. リクエストURLでテーブル名とフィールド名を公開する

    2. C#でMysqlDBに接続する-データセットでいくつか必要

    3. SQL UPDATEのstr_replace?

    4. テーブルの主キーに一意のランダム整数IDを作成するにはどうすればよいですか?