全部產品
Search
文件中心

PolarDB:Hint簡介

更新時間:Jul 06, 2024

本文介紹了自訂HINT的用途以及基本文法。

本文適用於PolarDB-X 1.0 5.3及以上版本。

簡介

HINT作為一種SQL補充文法,在關係型資料庫中扮演著非常重要的角色。它允許使用者通過相關的文法影響SQL的執行方式,對SQL進行特殊的最佳化。

PolarDB-X 1.0也提供了特殊的HINT文法。例如已知目標資料在某些分庫的分表中,需要直接將SQL下發到該分庫執行,就可以使用PolarDB-X 1.0自訂HINT來完成。

PolarDB-X 1.0自訂HINT文法

文法

 /*+TDDL: hint_command [hint_command ...]*/
 /!+TDDL: hint_command [hint_command ...]*/          

注意事項

  • PolarDB-X 1.0自訂HINT支援/*+TDDL:hint_command*//!+TDDL:hint_command*/兩種格式。
  • HINT語句位於/**//!*/之間,並且必須以+TDDL:開頭。其中hint_commandPolarDB-X 1.0自訂HINT命令,與具體的操作相關,多個hint_command之間使用空格分割。
  • 如果使用/*+TDDL:hint_command*/格式,在使用MySQL官方命令列用戶端執行帶有PolarDB-X 1.0自訂HINT的SQL時,請在登入命令中加上-c 參數。否則,由於PolarDB-X 1.0自訂HINT是以 MySQL 注釋形式使用的,該用戶端會將備註陳述式刪除後再發送到服務端執行,導致PolarDB-X 1.0自訂HINT失效。具體請查看MySQL 官方用戶端命令

樣本

# 查詢每個分庫中的物理表名
/*+TDDL:scan()*/SHOW TABLES;

# 將查詢下發到RDS唯讀執行個體的0000分庫上
/*+TDDL:node(0) slave()*/SELECT * FROM t1;  

樣本中/*+TDDL:scan()*//*+TDDL:node(0) slave()*/PolarDB-X 1.0自訂HINT部分,以+TDDL:開頭。scan()node(0)slave()PolarDB-X 1.0自訂HINT命令,多個HINT命令之間使用空格分割。

在SQL語句中使用HINT

PolarDB-X 1.0支援在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 1.0支援在HINT語句中使用多個HINT命令,例如:

SELECT /*+TDDL:node(0) slave()*/ ...;         

PolarDB-X 1.0不支援通過以下方式使用多個HINT命令:

# 不支援單條SQL語句中包含多個HINT語句
SELECT /*+TDDL:node(0)*/ /*+TDDL:slave()*/ ...;

# 不支援HINT語句中包含重複的HINT命令
SELECT /*+TDDL:node(0) node(1)*/ ...;      

PolarDB-X 1.0自訂HINT分類