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

外側のJOINの述語にLITERALを使用して2つの左結合がぶら下がっているORACLEは、左端のテーブルから行を除外します

    Oracle(バージョン12.1.0.2.0)データベースでは再現できませんでしたが、非常に興味深い観察結果です。私はWindowsではなくOracleLinux6.5を使用していることに言及する必要があります。とにかく、この単純でありながら興味深いクエリのために、実行プランも投稿することをお勧めします。

    実行プランを投稿していただきありがとうございます。これは、クエリの動作を非常によく説明しています。次に、最初の実行計画から説明します。

    |*  2 |   HASH JOIN        |      |     1 |    17 |     8   (0)| 00:00:01 |
    |   3 |    VIEW            |      |     2 |    14 |     4   (0)| 00:00:01 |
    |   4 |     SORT UNIQUE    |      |     2 |       |     4  (50)| 00:00:01 |
    |   5 |      UNION-ALL     |      |       |       |            |          |
    |   6 |       FAST DUAL    |      |     1 |       |     2   (0)| 00:00:01 |
    |   7 |       FAST DUAL    |      |     1 |       |     2   (0)| 00:00:01 |
    |   8 |    VIEW            |      |     2 |    20 |     4   (0)| 00:00:01 |
    |   9 |     SORT UNIQUE    |      |     2 |       |     4  (50)| 00:00:01 |
    |  10 |      UNION-ALL     |      |       |       |            |          |
    |  11 |       FAST DUAL    |      |     1 |       |     2   (0)| 00:00:01 |
    |  12 |       FAST DUAL    |      |     1 |       |     2   (0)| 00:00:01 |
    

    ご覧のとおり、オプティマイザは左結合ではなく内部結合を選択します。これは、本来あるべき「HASHJOINOUTER」ではなく「HASHJOIN」によって示されます。

    正直なところ、このようなバグについては(これまでのところ)何も聞いていなかったので、次のことをお勧めします。

    • 文書化されていないパラメータが含まれている場合は、pfile/spfileを確認してください。
    • これらのパラメータを設定するとパフォーマンスが向上する場合がありますが、多くの場合、「カルマは...」ということわざにあるように、予期しない実行/パフォーマンス動作が非常に悪い方法で発生する可能性があります。



    1. PostgreSQLの結果セットについて説明してください。

    2. より古いタイムスタンプを選択します

    3. search_conditionの値の後にOracle制約を照会する

    4. SQL:大文字と小文字を区別しない重複をマージする方法