ヘッダーをスキップ

Oracle TimesTen In-Memory Database APIおよびSQLリファレンス・ガイド リリース6.0 B25770-01 |
| 目次 | 索引

前へ | 次へ |

## ttOptSetOrder

説明

オプティマイザが表を結合する順序を指定します。文字列は、カンマではなく空白で区切られた相関名のリストで、問合せまたは副問合せで参照されます。最初に表示されている表が、計画によって最初にスキャンされます（たとえば、ネステッド・ループ結合では一番外側になります）。相関名は、修飾された表名のショートカットまたは別名です。

構文

    ttOptSetOrder (join_order)

パラメータ

ttOptSetOrderには、次の必須のパラメータがあります。

パラメータ | データ型 | 説明
join_order | Varchar(1024) | 空白で区切られた表相関名のリスト。表名を区別するために所有者が必要な場合は、表相関名を使用します。join_orderを指定しない場合、問合せオプティマイザの動作はデフォルトに戻ります。

結果セット

ttOptSetOrderは結果を返しません。

例

    CALL ttOptSetOrder ('EMPS DEPTS ACCTS');

    結合順序を指定するときに、実際の表名ではなく、相関名を使用します。

注意

結合順序を使用する場合、問合せによって参照される表の名前は、指定した名前と厳密に一致している必要があります（比較では大文字と小文字が区別されません）。完全な順序を指定する必要があります。部分的な順序を指定するメカニズムはありません。問合せに副問合せがある場合、結合順序は副問合せの中の相関名も参照する必要があります。つまり、結合順序は問合せの中のすべての相関名を参照する必要があります。TimesTenオプティマイザは、GROUP BYを使用して、特別な種類の結合問合せとして副問合せを内部的に実装し、すべての相関名を参照して結合順序を適用可能とします。矛盾がある場合は警告が発行され、指定した結合順序は完全に無視されます。

たとえば、アプリケーションが次のコールを実行するとします。

    ttOptSetOrder('DEPTS EMPS ACCTS');

    オプティマイザは、特定のアカウントで働いている従業員の数を評価する際に、DEPTSとACCTSの間で結合を実行することはできません。

    SELECT COUNT(DISTINCT EMPS.ID)
    FROM   ACCTS, DEPTS, EMPS
    WHERE  ACCTS.DEPTS = DEPTS.ID
    AND    EMPS.DEPTS = DEPTS.ID
    AND    ACCTS.NUM = :AcctNum

    アプリケーションが次のコールを実行するとします。

    call ttOptSetOrder('ORDERS CUSTOMERS');

    オプティマイザは、1つ以上の未出荷注文を持つすべての顧客を表示する次の問合せを評価する際に、CUSTOMERSをスキャンする前に、ORDERS表をスキャンします。

    SELECT CUSTOMERS.NAME
    FROM   CUSTOMERS
    WHERE  EXISTS (SELECT 1
                   FROM   ORDERS
                   WHERE  CUSTOMERS.ID = ORDERS.CUSTID
                   AND    ORDER.STATUS ='UN-SHIPPED');

    アプリケーションで、結合順序をリセットせずに、3つの各表を参照しないコマンドを準備しようとすると、オプティマイザによって警告番号965が発行されます。指定した結合順序は適用されません。TimesTenでは、コマンドが準備される際、有効な結合順序が考慮され、指定した結合順序は無視されます。

    文字列の長さは1,024バイトに制限されています。文字列がこの長さを超えると、切り捨てられ、警告が発行されます。

    副問合せで参照される相関名が結合順序に含まれていると、TimesTenでは、内部的に分離モードに切り替えられます。

    コマンドが準備されている場合は、現在のオプティマイザ・フラグ、索引ヒントおよび結合順序はコマンドのコンパイル済形式の構造で保持され、システムによってそのコマンドが再準備されるときに使用されます。再準備された文の例については、TimesTenの開発者ガイドのTimesTen問合せオプティマイザの章を参照してください。

    このコールによって加えられた変更はただちに有効になり、現在のトランザクションでのODBC関数SQLPrepareまたはJDBCメソッドConnection.prepareCallへの後続のすべてのコールに影響します。

関連項目

ttLogBufPrint
ttOptEstimateStats
ttOptGetFlag
ttOptGetOrder
ttOptSetColIntvlStats
ttOptSetFlag
ttOptSetTblStats
ttOptUpdateStats
ttOptUseIndex