Teradata-join-index
Teradata-JOINインデックス
JOIN INDEXはマテリアライズドビューです。 その定義は永続的に保存され、データは、結合インデックスで参照されるベーステーブルが更新されるたびに更新されます。 JOIN INDEXには、1つ以上のテーブルが含まれ、事前に集計されたデータも含まれます。 結合インデックスは、主にパフォーマンスを改善するために使用されます。
さまざまな種類の結合インデックスが利用可能です。
- 単一テーブル結合インデックス(STJI)
- マルチテーブル結合インデックス(MTJI) *集約結合インデックス(AJI)
単一テーブル結合インデックス
単一テーブル結合インデックスを使用すると、基本テーブルの列とは異なるプライマリインデックス列に基づいて大きなテーブルをパーティション化できます。
構文
JOIN INDEXの構文は次のとおりです。
例
次のEmployeeテーブルとSalaryテーブルを検討してください。
以下は、EmployeeテーブルにEmployee_JIという名前の結合インデックスを作成する例です。
ユーザーがEmployeeNoのWHERE句を使用してクエリを送信すると、システムは一意のプライマリインデックスを使用してEmployeeテーブルをクエリします。 ユーザーがemployee_nameを使用して従業員テーブルを照会すると、システムはemployee_nameを使用して結合インデックスEmployee_JIにアクセスできます。 結合インデックスの行は、employee_name列でハッシュされます。 結合インデックスが定義されておらず、employee_nameがセカンダリインデックスとして定義されていない場合、システムは全テーブルスキャンを実行して行にアクセスしますが、これには時間がかかります。
次のEXPLAINプランを実行して、オプティマイザープランを検証できます。 次の例では、テーブルがEmployee_Name列を使用してクエリを実行するときに、オプティマイザーがベースEmployeeテーブルの代わりに結合インデックスを使用していることがわかります。
マルチテーブル結合インデックス
複数テーブル結合インデックスは、複数のテーブルを結合することにより作成されます。 マルチテーブル結合インデックスを使用して、頻繁に結合されるテーブルの結果セットを保存し、パフォーマンスを向上させることができます。
例
次の例では、EmployeeテーブルとSalaryテーブルを結合して、Employee_Salary_JIという名前のJOIN INDEXを作成します。
ベーステーブルEmployeeまたはSalaryが更新されるたびに、結合インデックスEmployee_Salary_JIも自動的に更新されます。 EmployeeテーブルとSalaryテーブルを結合するクエリを実行している場合、オプティマイザーはテーブルを結合する代わりにEmployee_Salary_JIのデータに直接アクセスすることを選択できます。 クエリのEXPLAINプランを使用して、オプティマイザがベーステーブルまたは結合インデックスを選択するかどうかを確認できます。
集約結合インデックス
テーブルが特定の列で一貫して集約される場合は、集約結合インデックスをテーブルで定義してパフォーマンスを改善できます。 集約結合インデックスの1つの制限は、SUM関数とCOUNT関数のみをサポートすることです。
例
次の例では、EmployeeとSalaryを結合して、部門ごとの合計給与を識別しています。