Dicas do Aurora MySQL
É possível usar dicas SQL com consultas do Aurora MySQL para ajustar a performance. Também é possível usar dicas para impedir que planos de execução para consultas importantes sejam alterados devido a condições imprevisíveis.
dica
Para verificar o efeito que uma dica tem em uma consulta, examine o plano de consulta produzido pela instrução EXPLAIN
. Compare os planos de consulta com e sem a dica.
No Aurora MySQL versão 3, é possível usar todas as dicas disponíveis no MySQL Community Edition 8.0. Para ter mais informações sobre essas dicas, consulte Dicas do Optimizer
As dicas a seguir estão disponíveis no Aurora MySQL versão 2. Elas se aplicam a consultas que usam o recurso de junção de hash no Aurora MySQL versão 2, especialmente a consultas que usam a otimização de consultas paralelas.
- PQ, NO_PQ
-
Especifica se deve forçar o Optimizer a usar a consulta paralela por tabela ou por consulta.
PQ
força o Optimizer a usar a consulta paralela para tabelas especificadas ou para toda a consulta (bloco).NO_PQ
impede que o Optimizer use a consulta paralela para tabelas especificadas ou para toda a consulta (bloco).Esta dica está disponível no Aurora MySQL versão 2.11 e posterior. Os exemplos a seguir mostram como usar essa dica.
nota
A especificação de um nome de tabela força o Optimizer a aplicar a dica
PQ/NO_PQ
somente às tabelas selecionadas. Não especificar um nome de tabela força a dicaPQ/NO_PQ
em todas as tabelas afetadas pelo bloco de consulta.EXPLAIN SELECT /*+ PQ() */ f1, f2 FROM num1 t1 WHERE f1 > 10 and f2 < 100; EXPLAIN SELECT /*+ PQ(t1) */ f1, f2 FROM num1 t1 WHERE f1 > 10 and f2 < 100; EXPLAIN SELECT /*+ PQ(t1,t2) */ f1, f2 FROM num1 t1, num1 t2 WHERE t1.f1 = t2.f21; EXPLAIN SELECT /*+ NO_PQ() */ f1, f2 FROM num1 t1 WHERE f1 > 10 and f2 < 100; EXPLAIN SELECT /*+ NO_PQ(t1) */ f1, f2 FROM num1 t1 WHERE f1 > 10 and f2 < 100; EXPLAIN SELECT /*+ NO_PQ(t1,t2) */ f1, f2 FROM num1 t1, num1 t2 WHERE t1.f1 = t2.f21;
- HASH_JOIN, NO_HASH_JOIN
-
Ativa ou desativa a capacidade do Optimizer de consulta paralela de escolher se deseja usar o método de otimização de junção de hash para uma consulta.
HASH_JOIN
permite que o Optimizer use junção de hash se esse mecanismo for mais eficiente.NO_HASH_JOIN
impede que o Optimizer use junção de hash para a consulta. Esta dica está disponível no Aurora MySQL versão 2.08 e posterior. Ela não tem efeito no Aurora MySQL versão 3.Os exemplos a seguir mostram como usar essa dica.
EXPLAIN SELECT/*+ HASH_JOIN(t2) */ f1, f2 FROM t1, t2 WHERE t1.f1 = t2.f1; EXPLAIN SELECT /*+ NO_HASH_JOIN(t2) */ f1, f2 FROM t1, t2 WHERE t1.f1 = t2.f1;
- HASH_JOIN_PROBING, NO_HASH_JOIN_PROBING
-
Em uma consulta de junção de hash, especifica se deve ou não usar a tabela especificada para o lado de teste da junção. A consulta testa se os valores de coluna da tabela de compilação existem na tabela de teste, em vez de ler todo o conteúdo da tabela de teste. É possível usar
HASH_JOIN_PROBING
eHASH_JOIN_BUILDING
para especificar como as consultas de junção hash são processadas sem reordenar as tabelas dentro do texto da consulta. Esta dica está disponível no Aurora MySQL versão 2.08 e posterior. Ela não tem efeito no Aurora MySQL versão 3.Os exemplos a seguir mostram como usar essa dica. Especificar a dica
HASH_JOIN_PROBING
para a tabelaT2
tem o mesmo efeito que especificarNO_HASH_JOIN_PROBING
para a tabelaT1
.EXPLAIN SELECT /*+ HASH_JOIN(t2) HASH_JOIN_PROBING(t2) */ f1, f2 FROM t1, t2 WHERE t1.f1 = t2.f1; EXPLAIN SELECT /*+ HASH_JOIN(t2) NO_HASH_JOIN_PROBING(t1) */ f1, f2 FROM t1, t2 WHERE t1.f1 = t2.f1;
- HASH_JOIN_BUILDING, NO_HASH_JOIN_BUILDING
-
Em uma consulta de junção de hash, especifica se deve ou não usar a tabela especificada para o lado de compilação da junção. A consulta processa todas as linhas desta tabela para criar a lista de valores de coluna para referência cruzada com a outra tabela. É possível usar
HASH_JOIN_PROBING
eHASH_JOIN_BUILDING
para especificar como as consultas de junção hash são processadas sem reordenar as tabelas dentro do texto da consulta. Esta dica está disponível no Aurora MySQL versão 2.08 e posterior. Ela não tem efeito no Aurora MySQL versão 3.Os exemplos a seguir mostram como usar essa dica. Especificar a dica
HASH_JOIN_BUILDING
para a tabelaT2
tem o mesmo efeito que especificarNO_HASH_JOIN_BUILDING
para a tabelaT1
.EXPLAIN SELECT /*+ HASH_JOIN(t2) HASH_JOIN_BUILDING(t2) */ f1, f2 FROM t1, t2 WHERE t1.f1 = t2.f1; EXPLAIN SELECT /*+ HASH_JOIN(t2) NO_HASH_JOIN_BUILDING(t1) */ f1, f2 FROM t1, t2 WHERE t1.f1 = t2.f1;
- JOIN_FIXED_ORDER
-
Especifica que as tabelas na consulta são unidas com base na ordem em que são listadas na consulta. É útil com consultas que envolvem três ou mais tabelas. Deve ser um substituto da dica
STRAIGHT_JOIN
do MySQL e é equivalente à dica JOIN_FIXED_ORDERdo MySQL. Esta dica está disponível no Aurora MySQL versão 2.08 e posterior. Os exemplos a seguir mostram como usar essa dica.
EXPLAIN SELECT /*+ JOIN_FIXED_ORDER() */ f1, f2 FROM t1 JOIN t2 USING (id) JOIN t3 USING (id) JOIN t4 USING (id);
- JOIN_ORDER
-
Especifica a ordem de junção para as tabelas na consulta. É útil com consultas que envolvem três ou mais tabelas. É equivalente à dica JOIN_ORDER
do MySQL. Esta dica está disponível no Aurora MySQL versão 2.08 e posterior. Os exemplos a seguir mostram como usar essa dica.
EXPLAIN SELECT /*+ JOIN_ORDER (t4, t2, t1, t3) */ f1, f2 FROM t1 JOIN t2 USING (id) JOIN t3 USING (id) JOIN t4 USING (id);
- JOIN_PREFIX
-
Especifica as tabelas a serem colocadas em primeiro lugar na ordem de junção. É útil com consultas que envolvem três ou mais tabelas. É equivalente à dica JOIN_PREFIX
do MySQL. Esta dica está disponível no Aurora MySQL versão 2.08 e posterior. Os exemplos a seguir mostram como usar essa dica.
EXPLAIN SELECT /*+ JOIN_PREFIX (t4, t2) */ f1, f2 FROM t1 JOIN t2 USING (id) JOIN t3 USING (id) JOIN t4 USING (id);
- JOIN_SUFFIX
-
Especifica as tabelas a serem colocadas por último na ordem de junção. É útil com consultas que envolvem três ou mais tabelas. É equivalente à dica JOIN_SUFFIX
do MySQL. Esta dica está disponível no Aurora MySQL versão 2.08 e posterior. Os exemplos a seguir mostram como usar essa dica.
EXPLAIN SELECT /*+ JOIN_SUFFIX (t1) */ f1, f2 FROM t1 JOIN t2 USING (id) JOIN t3 USING (id) JOIN t4 USING (id);
Para obter informações sobre como usar consultas de junção de hash, consulte Otimizando grandes consultas de junção do Aurora MySQL com junções hash.