結合トリミングを決定するもの
このトピックでは、Oracle Analytics問合せエンジンが物理問合せからトリムできる結合を決定する方法について説明します。
論理表ソース内の表の結合トリミング・ルールは次のとおりです:
-
結合の外部性(内部、左外部、右外部、または完全外部)。
-
結合カーディナリティ(結合の少なくとも1つの側で不明なカーディナリティを持つものを除く、9つの結合カーディナリティの組合せがあります)。
-
論理表ソースにWHERE句のフィルタが含まれているかどうか。
-
物理結合が結合式か結合式か。
Oracle Analytics問合せエンジンは、次の基準を使用して結合をトリミングします:
-
トリミングされた表の参照は、列の予測されるリストやWHERE句の中など、問合せ内のどの場所にも存在しません。
-
トリミングされた表によって結果セットのカーディナリティが変更されることがあってはいけません。 結合を削除すると、選択した行の数が変更される可能性がある場合、Oracle Analytics問合せエンジンではトリミングされません。
次の条件のいずれかがtrueである場合、結合には、結果セットの行数を変更する可能性があるものと見なされます。 次の条件のいずれでもtrueである場合、結合は問合せからトリミングされません。
-
この結合は完全外部結合です。内部結合、左外部結合および右外部結合のみがトリミングの候補です
-
いずれかの側で結合カーディナリティが不明です。
-
トリミングする表は結合の多側にあります。つまり、プライマリ詳細関係でディテール表がトリミングされることはありません
-
トリミングする表のカーディナリティが0..1であり、結合が内部結合です。カーディナリティ0..1は、表内に一致する行が存在する可能性があることを意味します。 一方の側に0..1のカーディナリティが設定されている結合は、実質的にフィルタのように機能します。 Oracle Analytics問合せエンジンは、選択した行数を変更せずに表を切捨てることはできません。
-
トリミングする表が、左外部結合の左側、または右外部結合の右側にあり、行を維持する表は決してトリミングされません。 このルールでは、DISTINCT句が問合せに追加される属性のみを選択する問合せに対して、例外が1つあります。 DISTINCT句であるため、行を維持する表をトリミングしてもNull指定の表から返される行数に影響はありません。 属性に対する個別の問合せの特殊なケースでは、外部結合からの行を維持する表をトリミングできます。
-
次の表に、Oracle Analytics問合せエンジンが問合せから結合をトリムする場合の例を示します。
| シナリオ | 結果 |
|---|---|
|
従業員 内部結合 部門 |
Oracle Analytics問合せエンジンは内部結合の片側にあるため、部門を切り捨てることができます。 Oracle Analytics問合せエンジンは内部結合の多側にあるため、Employeeをトリミングできません。 |
|
従業員 左外部結合 部門 |
Oracle Analytics問合せエンジンは、結合の片側にあり、NULL供給表であるLEFT OUTER JOINの右側にあるため、部門をトリムできます。 Oracle Analytics問合せエンジンは多数の側にあり、LEFT OUTER JOIN、行保存表の左側にあるため、Employeeをトリムできません。 |
|
従業員 右外部結合 部門 |
Oracle Analytics問合せエンジンは、行保存表であるRIGHT OUTER JOINの右側にあるため、部門をトリムできません。 Oracle Analytics問合せエンジンは、結合の多側にあるため、Employeeを削除できません。 |
|
従業員 内部結合 従業員情報 |
両方の表が内部結合の片側にあるため、Oracle Analytics問合せエンジンはどちらの側も切り捨てることができます。 |
|
従業員 左外部結合 従業員情報 |
Oracle Analytics問合せエンジンは、結合の片側にあり、LEFT OUTER JOINの右側(null供給表)にあるため、EmployeeInfoを切り捨てることができます。 Oracle Analytics問合せエンジンは、行保存表の左側にあるLEFT OUTER JOINであるため、Employeeをトリムできません。 |
|
従業員 右外部結合 従業員情報 |
Oracle Analytics問合せエンジンは、行保存表であるRIGHT OUTER JOINの右側にあるため、EmployeeInfoを切り捨てることができます。 従業員は結合の1の側にあり、右外部結合の左側、Nullを指定する表にあるため、トリミングできます。 |
|
従業員 内部結合 部門 |
Oracle Analytics問合せエンジンは、内部結合の0..1側にあるため、部門をトリムできます。 Oracle Analytics問合せエンジンは内部結合の多側にあるため、Employeeをトリミングできます。 |
|
従業員 左外部結合 部門 |
Oracle Analytics問合せエンジンは、外部結合の0..1側にあり、LEFT OUTER JOINの右側(null供給表)にあるため、Departmentをトリムできます。 Oracle Analytics問合せエンジンでは、外部結合の0..1側でnull提供表をトリミングできます。この場合、問合せからDepartmentをトリミングしても、Employee表から選択された行数は変更されないためです。 Oracle Analytics問合せエンジンは外部結合の多側にあるため、Employeeをトリミングできます。 |
|
従業員 完全外部結合 部門 |
結合がFULL OUTER JOINであるため、Oracle Analytics問合せエンジンはどちらの側も切捨てできません。 |
![]() 従業員 複数対複数 プロジェクト |
結合が多対多であるため、Oracle Analytics問合せエンジンはどちらの側も切捨てできません。 |
![]() 従業員 不明 部門 |
結合に不明なカーディナリティがあるため、Oracle Analytics問合せエンジンはどちらの側も切捨てできません。 |

