このトピックでは、カスタムヒントの目的と基本構文について説明します。
このトピックは、PolarDB-X 1.0 5.3 以降に適用されます。
概要
ヒントは、標準 SQL 構文を補完する指示です。リレーショナルデータベースにおいて、ヒントを使用することで、ステートメントの実行に影響を与え、特定の最適化を適用することができます。
PolarDB-X 1.0 では、特別なヒント構文も提供しています。例えば、対象データが特定のデータベースシャード内の特定のテーブルシャードに存在することがわかっている場合、PolarDB-X 1.0 のカスタムヒントを使用して、SQL ステートメントをそれらのデータベースシャードに直接ルーティングすることができます。
PolarDB-X 1.0 カスタムヒント構文
構文
/*+TDDL: hint_command [hint_command ...]*/
/!+TDDL: hint_command [hint_command ...]*/
[注意事項]
- PolarDB-X 1.0 のカスタムヒントは、
/*+TDDL:hint_command*/と/!+TDDL:hint_command*/の 2 つの形式をサポートしています。 - ヒントは、
/*と*/、または/!と*/で囲み、+TDDL:で始める必要があります。hint_commandは、PolarDB-X 1.0 のカスタムヒントコマンドを指定します。複数のhint_commandを使用する場合は、スペースで区切ります。 - もし
/*+TDDL:hint_command*/形式を使用する場合、MySQL コマンドラインクライアントを使用して PolarDB-X 1.0 のカスタムヒントを含む SQL ステートメントを実行する際には、ログオンコマンドに-cパラメーターを追加する必要があります。PolarDB-X 1.0 のカスタムヒントは、MySQL コメントとして実装されています。-cパラメーターがない場合、クライアントは SQL ステートメントをサーバーに送信する前にこれらのコメントを削除するため、PolarDB-X 1.0 のカスタムヒントが無視されます。詳細については、「mysql クライアントオプション」をご参照ください。
[例]
# 各データベースシャードの物理テーブル名を照会します。
/*+TDDL:scan()*/SHOW TABLES;
# クエリを読み取り専用 ApsaraDB RDS インスタンスのデータベースシャード 0000 にルーティングします。
/*+TDDL:node(0) slave()*/SELECT * FROM t1;
この例では、/*+TDDL:scan()*/ と /*+TDDL:node(0) slave()*/ が PolarDB-X 1.0 のカスタムヒントであり、+TDDL: で始まります。コマンド scan()、node(0)、および slave() は、PolarDB-X 1.0 のカスタムヒントコマンドです。複数のヒントコマンドはスペースで区切ります。
SQL ステートメントでのヒントの使用
PolarDB-X 1.0 は、DML、DDL、および DAL ステートメントでのヒントをサポートしています。構文は次のとおりです。
- サポートされているすべてのステートメントで、ステートメントの前にヒントを追加できます。例:
/*+TDDL: ... */ SELECT ... /*+TDDL: ... */ INSERT ... /*+TDDL: ... */ REPLACE ... /*+TDDL: ... */ UPDATE ... /*+TDDL: ... */ DELETE ... /*+TDDL: ... */ CREATE TABLE ... /*+TDDL: ... */ ALTER TABLE ... /*+TDDL: ... */ DROP TABLE ... /*+TDDL: ... */ SHOW ... ... - DML ステートメントの場合、最初のキーワードの後にヒントを追加できます。例:
SELECT /*+TDDL: ... */ ... INSERT /*+TDDL: ... */ ... REPLACE /*+TDDL: ... */ ... UPDATE /*+TDDL: ... */ ... DELETE /*+TDDL: ... */ ... ...説明 サポートされているステートメントは、ヒントによって異なります。詳細については、各ヒントコマンドのドキュメントをご参照ください。
複数のヒントコマンドの使用
PolarDB-X 1.0 では、1 つのヒントブロック内で複数のヒントコマンドを使用できます。例:
SELECT /*+TDDL:node(0) slave()*/ ...;
PolarDB-X 1.0 は、次の方法でのヒントの使用をサポートしていません。
# 1 つの SQL ステートメント内で複数のヒントブロックを使用することはサポートされていません。
SELECT /*+TDDL:node(0)*/ /*+TDDL:slave()*/ ...;
# 1 つのヒントブロック内で重複するヒントコマンドを使用することはサポートされていません。
SELECT /*+TDDL:node(0) node(1)*/ ...;