Os hints do PolarDB-X permitem substituir o comportamento padrão de execução de consultas ao incorporar diretivas diretamente nas instruções SQL. Use hints para direcionar consultas a shards específicos, selecione instâncias somente leitura ou defina o tipo de carga de trabalho.
Sintaxe
O PolarDB-X oferece suporte a dois formatos de hint:
/*+TDDL: hint_command [hint_command ...]*/
/!+TDDL: hint_command [hint_command ...]*/
Uma única instrução SQL pode conter um hint com um ou mais comandos.
No cliente de linha de comando do MySQL, adicione a flag
-c
ao comando de login ao executar instruções SQL com hints do PolarDB-X. Sem a flag
-c
, o cliente remove o hint antes de enviar a instrução ao servidor. Isso ocorre porque o formato
/+TDDL:.../
é interpretado como um
e o hint não tem efeito. Consulte as
para obter detalhes.
Comandos de hint disponíveis
|
Comando de hint |
Finalidade |
Exemplo |
|
|
Consulta os nomes das tabelas físicas em cada shard |
|
|
|
Direciona a consulta para o shard especificado |
|
|
|
Encaminha a consulta para uma instância ApsaraDB RDS somente leitura |
|
|
|
Define o tipo de carga de trabalho como processamento analítico (AP) |
|
Exemplos
Listar tabelas físicas em todos os shards
Use scan() para consultar os nomes das tabelas físicas em cada shard.
/*+TDDL:scan()*/SHOW TABLES;
Direcionar uma consulta para um shard específico
Use node(n) para enviar uma consulta a um shard específico.
/*+TDDL:node(0)*/SELECT * FROM t1;
Encaminhar uma consulta para uma instância somente leitura
Use slave() para rotear uma consulta para uma instância ApsaraDB RDS somente leitura. O exemplo a seguir direciona a consulta para o Shard 0000 de uma instância ApsaraDB RDS somente leitura:
/*+TDDL:node(0) slave()*/SELECT * FROM t1;
Combinar múltiplos comandos de hint
Combine comandos de hint em um único bloco para aplicar várias diretivas simultaneamente. O exemplo abaixo roteia a consulta para o shard 0 de uma instância ApsaraDB RDS somente leitura:
/*+TDDL:node(0) slave()*/SELECT * FROM t1;
Alternativamente, posicione o hint após a palavra-chave inicial:
SELECT /*+TDDL:node(0) slave()*/ * FROM t1;
Definir o tipo de carga de trabalho
Use WORKLOAD=AP para marcar uma consulta como carga de trabalho de processamento analítico.
/*+TDDL:WORKLOAD=AP*/SELECT * FROM t1;
Limitações
-
Um hint por instrução. Uma única instrução SQL não pode conter mais de um bloco de comentário de hint. O exemplo a seguir é inválido:
-- Invalid: two separate hint blocks SELECT /*+TDDL:node(0)*/ /*+TDDL:slave()*/ * FROM t1;Em vez disso, combine ambos os comandos em um único hint:
SELECT /*+TDDL:node(0) slave()*/ * FROM t1; -
Sem comandos de hint duplicados. Um hint não pode repetir o mesmo comando. O exemplo a seguir é inválido:
-- Invalid: node() appears twice SELECT /*+TDDL:node(0) node(1)*/ * FROM t1;