View a markdown version of this page

Dicas do Aurora MySQL - Amazon Aurora

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 no Guia de referência do MySQL.

No Aurora MySQL versão 8.4, é possível usar todas as dicas disponíveis no MySQL Community Edition 8.4. Para ter mais informações sobre essas dicas, consulte Dicas do Optimizer no Guia de referência do MySQL.

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 dica PQ/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 e HASH_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 tabela T2 tem o mesmo efeito que especificar NO_HASH_JOIN_PROBING para a tabela T1.

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 e HASH_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 tabela T2 tem o mesmo efeito que especificar NO_HASH_JOIN_BUILDING para a tabela T1.

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_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_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.