すべてのプロダクト
Search
ドキュメントセンター

PolarDB:主要なヒント

最終更新日:Jun 03, 2024

このトピックでは、LEADINGヒントを使用してテーブル結合に複数のテーブルを指定する方法について説明します。 LEADINGヒントは、テーブルが他のテーブルに結合される前に、指定された順序でテーブルを結合するようにオプティマイザに指示します。

使用上の注意

  • LEADINGヒントは、ネストされたSQL文ではサポートされません。 予測できない結果の可能性を最小限に抑えるため、句にLEADINGヒントを使用しないでください。

  • オプティマイザが複数のテーブルの結合順序を生成すると、結合条件で構成されたテーブルが優先されます。 システムは、実行プランを生成できない場合にのみ、デカルト積を生成しようとします。 したがって、結合条件で構成された2つの隣接するテーブルにLEADINGヒントを使用すると、もう一方のテーブルの直後にある一方のテーブルが前のテーブルに結合されます。 それ以外の場合、実行計画を生成できないため、オプティマイザはLEADINGヒントを無視します。

前提条件

デフォルトでは、ヒント機能はPolarDB for PostgreSQL (Oracle互換) で有効になっています。 次のコマンドを実行して、この機能を有効にすることもできます。

set enable_hints = true;

構文

  • ヒント表記は /* + で始まり、*/ で終わります。 アスタリスク (*) とプラス記号 (+) の間にスペースは使用できません。

  • ヒントは、ヒント名の後に括弧で囲まれたパラメーターで構成されます。 パラメータはスペースで区切られています。

  • ヒントは、SELECT、UPDATE、INSERT、MERGE、DELETEなどのキーワードのすぐ後に続く必要があります。

  • ヒントは大文字と小文字を区別しません。

説明

以下の状況では、競合が存在する。 結果として、LEADINGヒントは無効になる。

  • 依存関係のために指定されたテーブルを指定された順序で結合できない場合、LEADINGヒントは無視されます。

  • 複数のLEADINGヒントが指定された場合、すべてのLEADINGヒントは無視されます。

  • ORDEREDヒントとLEADINGヒントの両方が指定されている場合、ORDEREDヒントはすべてのLEADINGヒントをオーバーライドします。

  • テーブルの指定された名前またはエイリアスに "s.t" などのピリオド (.) が含まれている場合、すべてのLEADINGヒントは無視されます。

  • LEADINGヒントがSELECT、UPDATE、INSERT、MERGE、DELETEなどのキーワードのすぐ後に続かない場合、LEADINGヒントは無視されます。

データベースが4つのテーブルを含むと仮定する。 テーブルの名前またはエイリアスは、a、b、c、およびdです。 各テーブルは別のテーブルに結合できます。

  • 有効な構文

    可能な参加

    /* + リーディング (a) * /

    (((a b) c) d) 、(((a b) d) c) 、(((a c) b) d) 、(((a c) d) b) 、(((a d) b) c) 、(((a c) c) b)

    /* + リーディング (a b) * /

    (((a b) c) d), (((a b) d) c)

    /* + リーディング (a b c) * /

    (((a b) c) d)

    /* + リーディング (a b c d) * /

    (((a b) c) d)

    説明

    ((a b) c) は、a、b、およびcの昇順で結合優先度を指定します。 (c (a b)) は、c、a、bの昇順で結合優先度を指定します。

  • 無効な構文

    例:

    • /* + リーディング (a) * /

    • /* + leading(a b) leading(a b) * /

    • /* + リーディング (a b a) * /

    • /* + leading(a b) leading(a)* /

    • /* + leading(a b) leading(c d) * /

    • /* + リーディング (a b e) * /

    • * + leading(a b) leading(a c) * /

    • /* + leading() * /

    説明

    データベースには、名前またはエイリアスがeであるテーブルが含まれていません。