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

Oracleでの完全外部結合の奇妙な動作-どのように説明できますか?

    オプティマイザは、NULL値を持つ可能性があるため、2番目のクエリでEMP.DEPT_IDのインデックスを使用することを選択しないでください。これが、結果から1行を除外する原因となっています。

    現時点で私が考えることができる唯一のバグ以外の説明は、オプティマイザーがフィールドにNULLを含めることができないと考えるように、DISABLERELYモードで何らかの形で制約を作成したことです。この場合、制約の情報が正しくないため、インデックスを使用するのが正しいでしょう。ただし、RELYオプションはNOT NULL制約には使用できないようであるため、これがどのように問題になるかはわかりません。それでも、テーブルのすべての制約を注意深く見てください。

    それはさておき、完全外部結合による誤った結果に関して、Oracleのサイトには驚くほど多くのバグがあります。あなたはそれらの1つを打っているかもしれません。これらのケースのかなりの数で、回避策は「ネイティブ」の完全外部結合を無効にすることです。これは、次のステートメントを使用して現在のセッションで実行できます。

    alter session set "_optimizer_native_full_outer_join"=off; 
    


    1. クエリ実行時間のpsycopg2ログを取得するにはどうすればよいですか?

    2. 指定されたすべてのタグでタグ付けされたものを見つけるためにSQLクエリのヘルプが必要

    3. SQL Serverのデータベースで変更データキャプチャ(CDC)を無効にする方法-SQLServerチュートリアル

    4. OracleのCREATEORREPLACEVIEWに相当するSQLServer