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.

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.