本文适用于PolarDB-X 5.3 及以上版本,其他版本請參見 PolarDB-X 5.2 HINT
。
HINT 作為一種 SQL 補充文法,在關系型資料庫中扮演着非常重要的角色。它允許使用者通過相關的文法影響 SQL 的執行方式,對 SQL 進行特殊的優化。同樣,PolarDB-X 也提供了特殊的 HINT 文法。
例如,假設已知目标資料在某些分庫的分表中,需要直接将 SQL 下發到該分庫執行,就可以使用 PolarDB-X 自定義 HINT 來完成。
-
SELECT /*+TDDL:node('node_name')*/ * FROM table_name;
這個 SQL 語句中
/*
和
*/
之間的語句就是 PolarDB-X 的自定義 HINT,即
+TDDL:node('node_name')
,它指定了 SQL 語句在特定的 RDS 分庫上執行。
注意:
- PolarDB-X 自定義 HINT 支援
/*+TDDL:hint_command*/
兩種格式。/!+TDDL:hint_command*/
- 如果使用
格式,在使用 MySQL 官方指令行用戶端執行帶有 PolarDB-X 自定義 HINT 的 SQL 時,請在登入指令中加上/*+TDDL:hint_command*/
參數。否則,由于 PolarDB-X 自定義 HINT 是以 MySQL 注釋 形式使用的,該用戶端會将注釋語句删除後再發送到服務端執行,導緻 PolarDB-X 自定義 HINT 失效。詳情請參見 MySQL 官方用戶端指令-c
PolarDB-X 自定義 HINT 文法
基本文法:
-
/*+TDDL: hint_command [hint_command ...]*/
-
/!+TDDL: hint_command [hint_command ...]*/
PolarDB-X 自定義 HINT 基于
MySQL注釋,HINT語句支援
/* hint */
/! hint */
兩種格式,并且必須以
+TDDL:
開頭。其中
hint_command
是 PolarDB-X 自定義 HINT 指令,與具體的操作相關, 多個
hint_command
之間使用空格分割。
例子:
-
# 查詢每個分庫中的實體表名
-
/*+TDDL:scan()*/SHOW TABLES;
-
# 将查詢下發到 RDS 隻讀執行個體的 0000 分庫上
-
/*+TDDL:node(0) slave()*/SELECT * FROM t1;
例子中
/*+TDDL:scan()*/
/*+TDDL:node(0) slave()*/
為 PolarDB-X 自定義 HINT 部分,以
+TDDL:
開頭。
scan()
、
node(0)
slave()
為 PolarDB-X 自定義 HINT 指令,多個 HINT 指令之間使用空格分割。
在 SQL 語句中使用 HINT:
PolarDB-X 支援在 DML、DDL、DAL 語句中使用 HINT,具體文法如下:
- 對于所有支援 HINT 的語句,允許在語句前指定 HINT,如
-
-
/*+TDDL: ... */ SELECT ...
-
/*+TDDL: ... */ INSERT ...
-
/*+TDDL: ... */ REPLACE ...
-
/*+TDDL: ... */ UPDATE ...
-
/*+TDDL: ... */ DELETE ...
-
/*+TDDL: ... */ CREATE TABLE ...
-
/*+TDDL: ... */ ALTER TABLE ...
-
/*+TDDL: ... */ DROP TABLE ...
-
/*+TDDL: ... */ SHOW ...
-
...
-
- 對于 DML 語句,允許在首個關鍵字之後指定 HINT,如
-
-
SELECT /*+TDDL: ... */ ...
-
INSERT /*+TDDL: ... */ ...
-
REPLACE /*+TDDL: ... */ ...
-
UPDATE /*+TDDL: ... */ ...
-
DELETE /*+TDDL: ... */ ...
-
...
-
不同 HINT 支援的語句範圍可能不同,實際支援情況請參見具體HINT指令說明。
使用多個 HINT:
PolarDB-X 支援在 HINT 語句中使用多個 HINT 指令
-
SELECT /*+TDDL:node(0) slave()*/ ...;
PolarDB-X 不支援通過以下方式使用多個 HINT 指令
-
# 不支援 單條 SQL 語句中包含多個 HINT 語句
-
SELECT /*+TDDL:node(0)*/ /*+TDDL:slave()*/ ...;
-
# 不支援 HINT 語句中 包含重複的 HINT 指令
-
SELECT /*+TDDL:node(0) node(1)*/ ...;
PolarDB-X 自定義 HINT 分類
根據操作類型的不同,PolarDB-X 的自定義 HINT 主要可以分為以下幾類:
PolarDB-X 自定義 HINT 相容性
PolarDB-X 5.3 及以上版本,向下相容大部分PolarDB-X 5.2 自定義 HINT,詳細對照關系如下
支援情況 | 對應的 PolarDB-X 5.3 HINT | |
支援 5.2 HINT 文法 | ||
備庫延遲切斷 | 不支援,添加後不産生效果 | 無 |
部分支援, 通過分庫鍵值指定 SQL 在分庫上執行遷移至 | ||
支援,增加根據條件計算實體表名稱和顯式指定實體表名功能 |