ヒントは 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 より大きい必要があります。 単位: ミリ秒。 このパラメーターは、 説明
|
_l_force_index_ | STRING | インデックスを必ず使用するように指定します。 このパラメーターは、 説明 _l_force_index_ パラメーターは、_l_ignore_index_ パラメーターと一緒に指定することはできません。 |
_l_ignore_index_ | 該当なし | インデックスを使用してデータをクエリしないように指定します。 インデックスを使用するクエリとインデックスを使用しないクエリの性能を比較する場合に、ヒントでこのパラメーターを指定できます。 ヒントで使用する場合は、このパラメーターに値を指定する必要はありません。 このパラメーターは、 説明 _l_ignore_index_ パラメーターは、_l_force_index_ パラメーターと一緒に指定することはできません。 |
_l_allow_filtering_ | 該当なし | テーブル内のすべてのデータをスキャンする非効率的なクエリを許可するかどうかを指定します。 このパラメーターがクエリで指定されていない場合、クエリの WHERE 条件にプライマリキーが含まれていないとエラーが返されます。 このパラメーターをヒントで指定すると、エラーを報告せずにクエリを実行できます。 ヒントで使用する場合は、このパラメーターに値を指定する必要はありません。 このパラメーターは、 |
_l_versions_ | INT | クエリするデータの最新の N バージョンが返されるように指定します。 このパラメーターの値は 0 より大きい必要があります。 このパラメーターは、 |
_l_ts_ | BIGINT | データがプライマリキー以外の列に挿入された時刻、またはプライマリキー以外の列のデータがクエリされた時刻を示すタイムスタンプ。 タイムスタンプは、データのバージョン管理に使用できます。 このパラメーターの値は 0 より大きい必要があります。 単位: ミリ秒。 このパラメーターは、 |
_l_ts_min_ | BIGINT | クエリするデータの最小タイムスタンプ。 このパラメーターの値は 0 より大きい必要があります。 単位: ミリ秒。 このパラメーターは、 |
_l_ts_max_ | BIGINT | クエリするデータの最大タイムスタンプ。 このパラメーターの値は 0 より大きい必要があります。 単位: ミリ秒。 このパラメーターは、 |
_l_hot_only_ | BOOLEAN | ホットデータのみをクエリするかどうかを指定します。 このパラメーターは、 このパラメーターには、次のいずれかの値を設定できます。
|
例
例 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 | +----+----+---------+
シナリオ
ヒントを使用してホットデータをクエリできます。