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

Lindorm:ヒント

最終更新日:May 31, 2025

ヒントは SQL 構文を補足するものであり、データベースで実行されるクエリにおいて重要な役割を果たします。 SQL 文でヒントを使用すると、SQL 文の実行方法を変更できます。 LindormTable は、SQL 文でのヒントをサポートしています。 たとえば、LindormTable SQL 文でヒントを使用して、データの複数のバージョンを管理できます。 このトピックでは、LindormTable におけるヒントの構文とシナリオについて説明します。

前提条件

LindormTable のバージョンが 2.3.1 以後である必要があります。 LindormTable のバージョンの表示またはアップグレード方法の詳細については、「LindormTable のリリースノート」および「Lindorm インスタンスのマイナーエンジンバージョンのアップグレード」をご参照ください。

制限事項

  • ヒントは、SQL 文の INSERT、UPSERT、DELETE、および SELECT キーワードの後でのみ使用できます。

  • インスタンスの LindormTable バージョンが 2.5.2.1 以前の場合、サブクエリやグループクエリなどの複雑なクエリを実行するために実行される SQL 文ではヒントを使用できません。

構文

hintExpression ::= /*+ hintItems */

hintItems ::= hintItem (',' hintItem )*

hintItem ::= identifier ('(' hintOption ( ',' hintOption)* ')')?

identifier ::=  ( [A-Z] | '_' ) ( [A-Z] | [0-9] | '_' | '@' | ':')*
説明
  • ヒントは /*+ hintItems */ 形式で使用されます。ここで、hintItems は操作固有のヒントを示します。 複数の hintItems はカンマ (,) で区切ります。

  • ヒントは、LindormTable SQL 文の INSERT、UPSERT、DELETE、および SELECT キーワードの後でのみ使用できます。 たとえば、次の文のヒントは無効です: UPSERT INTO /*+ _l_ts_(3000) */ t_test_ts(c1, c3) VALUES (1, 'c3');

hintOptions のパラメーター

パラメーター

タイプ

説明

_l_operation_timeout_

説明

バージョン 2.5.2.1 より前の Lindorm では、このパラメーターの名前は operationtimeout です。

INT

DML 操作のタイムアウト期間。 デフォルト値: 120000。 このパラメーターの値は 0 より大きい必要があります。 単位: ミリ秒。 このパラメーターは、UPSERTDELETEUPDATE、および SELECT 文のヒントにのみ適用されます。

説明
  • このパラメーターを DELETE 文と UPDATE 文で使用する場合は、SQL エンジンバージョンが 2.8.4.4 以後である必要があります。 SQL バージョン はコンソールで確認できます。

  • _l_operation_timeout_ は、ヒント内の他のパラメーターと一緒に使用できます。 異なるパラメーターはカンマ (,) で区切ります。 例: SELECT /*+ _l_operation_timeout_(1000), _l_force_index_('idx1') */ * from test;

_l_force_index_

STRING

インデックスを必ず使用するように指定します。 このパラメーターは、SELECT 文のヒントにのみ適用されます。

説明

_l_force_index_ パラメーターは、_l_ignore_index_ パラメーターと一緒に指定することはできません。

_l_ignore_index_

該当なし

インデックスを使用してデータをクエリしないように指定します。 インデックスを使用するクエリとインデックスを使用しないクエリの性能を比較する場合に、ヒントでこのパラメーターを指定できます。 ヒントで使用する場合は、このパラメーターに値を指定する必要はありません。 このパラメーターは、SELECT 文のヒントにのみ適用されます。

説明

_l_ignore_index_ パラメーターは、_l_force_index_ パラメーターと一緒に指定することはできません。

_l_allow_filtering_

該当なし

テーブル内のすべてのデータをスキャンする非効率的なクエリを許可するかどうかを指定します。 このパラメーターがクエリで指定されていない場合、クエリの WHERE 条件にプライマリキーが含まれていないとエラーが返されます。 このパラメーターをヒントで指定すると、エラーを報告せずにクエリを実行できます。 ヒントで使用する場合は、このパラメーターに値を指定する必要はありません。 このパラメーターは、SELECT 文のヒントにのみ適用されます。

_l_versions_

INT

クエリするデータの最新の N バージョンが返されるように指定します。 このパラメーターの値は 0 より大きい必要があります。 このパラメーターは、SELECT 文のヒントにのみ適用されます。

_l_ts_

BIGINT

データがプライマリキー以外の列に挿入された時刻、またはプライマリキー以外の列のデータがクエリされた時刻を示すタイムスタンプ。 タイムスタンプは、データのバージョン管理に使用できます。 このパラメーターの値は 0 より大きい必要があります。 単位: ミリ秒。 このパラメーターは、UPSERT および SELECT 文のヒントにのみ適用されます。

_l_ts_min_

BIGINT

クエリするデータの最小タイムスタンプ。 このパラメーターの値は 0 より大きい必要があります。 単位: ミリ秒。 このパラメーターは、SELECT 文のヒントにのみ適用されます。

_l_ts_max_

BIGINT

クエリするデータの最大タイムスタンプ。 このパラメーターの値は 0 より大きい必要があります。 単位: ミリ秒。 このパラメーターは、SELECT 文のヒントにのみ適用されます。

_l_hot_only_

BOOLEAN

ホットデータのみをクエリするかどうかを指定します。 このパラメーターは、SELECT 文のヒントにのみ適用されます。

このパラメーターには、次のいずれかの値を設定できます。

  • true: テーブル内のホットデータのみがクエリされます。

  • false: テーブル内のすべてのデータがクエリされます。

    説明

    テーブル内のすべてのデータをクエリするように指定するには、_l_hot_only_false に設定するか、ヒントでこのパラメーターを指定しません。

  • 例 1: テーブルの行数をクエリし、DML 操作のタイムアウト期間を 30,000 ミリ秒に設定します。

    SELECT /*+  _l_operation_timeout_(30000) */ COUNT(*) FROM t_test_ts;

    次の結果が返されます。

    +----------+
    | COUNT(*) |
    +----------+
    | 1        |
    +----------+
  • 例 2: テーブルの行にデータを書き込み、DML 操作のタイムアウト期間を 30,000 ミリ秒に設定します。

    UPSERT /*+  _l_operation_timeout_(30000) */ INTO t_test_ts(c1, c2, c3) values(1,2,3);
  • 例 3: 条件に一致するデータを削除し、DML 操作のタイムアウト期間を 30,000 ミリ秒に設定します。

    DELETE /*+  _l_operation_timeout_(30000) */ FROM tb WHERE c1 = 1;
  • 例 4: _l_force_index_ を指定して、クエリでインデックスを強制的に使用します。

    SELECT /*+  _l_force_index_('idx1') */ COUNT(*) FROM tb; // 'idx1' は、テーブルに作成されたインデックスを示します。

    次の結果が返されます。

    +----------+
    | COUNT(*) |
    +----------+
    | 1        |
    +----------+
  • 例 5: _l_ignore_index_ を指定して、インデックスを使用せずにクエリを実行します。

    SELECT /*+  _l_ignore_index_ */ COUNT(*) FROM tb;

    次の結果が返されます。

    +----------+
    | COUNT(*) |
    +----------+
    | 1        |
    +----------+
  • 例 6: _l_allow_filtering_ を指定して、条件にプライマリキーが含まれていないクエリを許可します。

    SELECT /*+ _l_allow_filtering_ */ COUNT(*) FROM tb WHERE c1 = 2;

    次の結果が返されます。

    +----------+
    | COUNT(*) |
    +----------+
    | 1        |
    +----------+

    クエリ条件で指定された c1 列は、プライマリキー列またはインデックスキー列ではありません。 ヒントで _l_allow_filtering_ パラメーターを指定した後、エラーは返されません。

  • 例 7: _l_ts_ を指定して、挿入するデータのタイムスタンプを設定します。

    UPSERT /*+ _l_ts_(3000) */ INTO t_test_ts(c1, c3) VALUES (1, 'c3');
  • 例 8: _l_versions_ を指定して、データの最新バージョンをクエリします。

    SELECT /*+ _l_versions_(1) */ c1, c3, c3_l_ts FROM t_test_ts;

    次の結果が返されます。

    +----+----+---------+
    | c1 | c3 | c3_l_ts |
    +----+----+---------+
    | 1  | c3 | 3000    |
    +----+----+---------+

シナリオ

ヒントを使用してホットデータをクエリできます。