Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

クエリでの最適化ヒントの指定

既定で、InterSystems SQL クエリ・オプティマイザは、高度で柔軟性の高いアルゴリズムを使用して、複数のインデックスを含む複雑なクエリのパフォーマンスを最適化します。大半の場合、このような既定の設定によって最適なパフォーマンスが得られます。一方、InterSystems SQL には、実行プランの手動変更に使用できるヒントが用意されています。ほとんどの場合、インターシステムズのサポート窓口の助言に従い、これらのヒントを使用して最適なクエリ実行プランを構成します。SQL のパフォーマンスについてサポート窓口の助言を得るには "レポート生成" を参照してください。

このようなヒントをクエリ・オプティマイザに提供して、特定の最適化を採用し、他を除外することを指定するには 2 つの方法があります。その 1 つは SELECT 文の FROM 節にキーワードを使用する方法で、もう 1 つはコマンド・オプションを指定する方法です。

FROM 節のキーワード

SELECT 文には FROMを使用できますが、特定のクエリ最適化動作を指定するキーワードをその節に記述できます。複数のキーワードを、空白で区切って任意の順序で指定できます。各キーワードの詳細は、"クエリ最適化オプション" を参照してください。

指定できるキーワードは以下のとおりです。

  • %ALLINDEX – 何らかの利点が得られるすべてのインデックスを、クエリ結合順の先頭にあるテーブル向けに使用することを指定します。

  • %FIRSTTABLE – 指定したテーブル名との結合処理をクエリ・オプティマイザで開始することを指定します。

  • %FULL – 最大限のアクセス・パフォーマンスが得られるように、すべての代替結合シーケンスをコンパイラ・オプティマイザで検査することを指定します。

  • %IGNOREINDEX – 指定したインデックスまたは指定した一覧にあるすべてのインデックスをクエリ・オプティマイザでは無視することを指定します。

  • %INORDER – 複数のテーブルを、それを列挙した順序でクエリ・オプティマイザで結合することを指定します。

  • %NOFLATTEN – クエリ・オプティマイザでサブクエリを平坦化しないことを指定します。

  • %NOMERGE – クエリ・オプティマイザでサブクエリをビューに変換しないことを指定します。

  • %NOREDUCE – クエリ・オプティマイザでサブクエリ (またはビュー) をそれを含むクエリとマージしないことを指定します。

  • %NOSVSO – クエリ・オプティマイザで集合値サブクエリの最適化 (SVSO) を実行しないことを指定します。

  • %NOTOPOPT – TOP 節と ORDER BY 節で使用できます。完了した結果セットを最速で取得できるようにクエリを最適化します。

  • %NOUNIONOROPT – 複数の OR 条件向けと UNION クエリに対するサブクエリ向けに用意されている自動最適化を無効にします。

  • %PARALLEL – InterSystems IRIS によるクエリの並列処理を提案します。

  • %STARTTABLEOpens in a new tab – 先頭に列挙したテーブルとの結合処理をクエリ・オプティマイザで開始することを指定します。

コメント・オプション

SELECTINSERTUPDATEDELETE、または TRUNCATE TABLE の各コマンド内で、クエリ・オプティマイザに 1 つ以上のコメント・オプションを指定できます。コメント・オプションでは、クエリ・オプティマイザが SQL クエリのコンパイル時に使用するオプションを指定します。コメント・オプションは、特定のクエリのシステム全体の構成の既定をオーバーライドするのに使用されることが多いです。

構文

構文 /*#OPTIONS */ (/* と # の間にスペースなし) は、コメント・オプションを指定します。コメント・オプションはコメントではなく、クエリ・オプティマイザに対する値を指定します。コメント・オプションは、JSON 構文 (通常は、/*#OPTIONS {"optionName":value} */ などの key:value ペア) を使用して指定します。入れ子になった値など、より複雑な JSON 構文がサポートされています。

コメント・オプションはコメントではないため、JSON 構文以外のテキストを含めることはできません。JSON ではないテキストに区切り文字として /* ...*/ を使用すると SQLCODE -153 エラーが発生します。InterSystems SQL では、JSON 文字列のコンテンツは検証されません。

#OPTIONS キーワードは、大文字で指定する必要があります。{ } 括弧で囲まれた JSON 構文内でスペースは使用できません。ダイナミック SQL 文などのように SQL コードを引用符で囲む場合、JSON 構文内の引用符は二重にする必要があります。例えば、myquery="SELECT Name FROM Sample.MyTest /*#OPTIONS {""optName"":""optValue""} */" のように指定します。

SQL コード内のコメントを指定できる場所であれば、任意の場所で /*#OPTIONS */ コメント・オプションを指定できます。表示されている文テキストでは、コメント・オプションは常に、文テキスト末尾のコメントとして表示されます。

SQL コードで、複数の /*#OPTIONS */ コメント・オプションを指定できます。複数のコメント・オプションを指定した場合、返される文テキストでは、指定した順序でそれらのコメント・オプションが表示されます。同じオプションに対して複数のコメント・オプションを指定した場合、最後に指定したオプションの値が使用されます。

以下のコメント・オプションについては説明があります。

  • /*#OPTIONS {"DynamicSQLTypeList":"10,1,11"}

  • /*#OPTIONS {"NoTempFile":1} */

表示

/*#OPTIONS */ コメント・オプションは、SQL コマンドで指定された場所にかかわらず、SQL 文テキストの末尾に表示されます。表示される /*#OPTIONS */ コメント・オプションの中には、SQL コマンドでは指定されず、コンパイラのプリプロセッサによって生成されるものもあります。例えば、/*#OPTIONS {"DynamicSQLTypeList": ...}*/ と生成されます。

/*#OPTIONS */ コメント・オプションは、[プラン表示][ステートメント・テキスト]、[クエリキャッシュ] の [クエリ文字列]、および [SQL 文][ステートメント・テキスト] に表示されます。

/*#OPTIONS */ コメント・オプションのみが異なる複数のクエリの場合、個別のクエリ・キャッシュが作成されます。

FeedbackOpens in a new tab