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

左結合を使用するときに複合インデックスをオンにすることはできますか

    期待どおりに動作します。オラクルは、あなたが求めたことを正確に実行しました。

    CREATE INDEX email_phonenumber_student_idx
      ON student(phonenumber, email);
    

    phonenumber, emailに複合インデックスがあります 、フィルタ述語のどの列も使用していませんが クエリの:

    where months_between(SYSDATE, dateofbirth)/12 >= 18 
    and  xyz.studentnumber is null;
    

    したがって、Oracleがインデックススキャンを実行する理由はありません phonenumber, email 。複合キーの列をフィルタリングするのではなく、単に選択しているだけです:

    SELECT Phonenumber, email 
    from student left join Xyz
    

    インデックス プロジェクトのときに使用されます SELECT だけでなく、これらの列 。 STUDENT 予想どおり、テーブルはFULL TABLE SCANになります これは単純な選択であり、インデックス付きの列にフィルターを使用しないためです。インデックススキャンが行われていることを確認したい場合は、以下のフィルターを追加してください:

    AND phonenumber = <value>
    AND email = <value>
    


    1. SQLに複数の行を挿入中にエラーが発生する

    2. SQLサーバーとasp.netでのウィンドウ認証

    3. PHPがsqlserverバックアップデータベーススクリプトを呼び出し、バックアップファイルが作成されてから削除されました

    4. SQL ServerのFORMAT()でサポートされているカスタム数値形式文字列