Práticas recomendadas do Amazon Redshift para criar consultas - Amazon Redshift

Práticas recomendadas do Amazon Redshift para criar consultas

Para maximizar a performance das consultas, siga estas recomendações ao criá-las.

  • Projete tabelas de acordo com as melhores práticas para oferecer uma base sólida para a performance da consulta. Para ter mais informações, consulte Práticas recomendadas do Amazon Redshift para projetar tabelas.

  • Evite usar select *. Inclua apenas as colunas que você especificamente precisa.

  • Use um Expressão condicional CASE para executar agregações complexas em vez de selecionar várias vezes a partir da mesma tabela.

  • Não use junções cruzadas a menos que absolutamente necessário. Essas junções sem uma condição de junção resultam no produto Cartesiano de duas tabelas. Uniões cruzadas são normalmente executadas como uniões de loops aninhados, que são os tipos mais lentos de união possíveis.

  • Use subconsultas em casos em que uma tabela na consulta é usada apenas para condições de predicado e a subconsulta retorna um pequeno número de linhas (menor que aproximadamente 200). O seguinte exemplo usa uma subconsulta para evitar a junção da tabela LISTING.

    select sum(sales.qtysold) from sales where salesid in (select listid from listing where listtime > '2008-12-26');
  • Use predicados para restringir o conjunto de dados tanto quanto possível.

  • No predicado, use os operadores menos caros possíveis. Os operadores Condição de comparação são preferíveis a operadores LIKE. Operadores LIKE ainda são preferíveis a SIMILAR TO ou Operadores POSIX.

  • Evite usar funções em predicados de consulta. Seu uso pode aumentar o custo da consulta ao exigir grandes números de linhas para resolver as etapas intermediárias da consulta.

  • Se possível, use uma cláusula WHERE para restringir o conjunto de dados. O planejador de consulta pode, então, usar a ordem das linhas para ajudar a determinar quais registros correspondem aos critérios, portanto ele pode ignorar a varredura de um grande número blocos de disco. Sem isso, o mecanismo de execução da consulta deve fazer a varredura completa das colunas participantes.

  • Adicione predicados para filtrar tabelas que participam em junções, mesmo se os predicados aplicam os mesmos filtros. A consulta retorna o mesmo conjunto de resultados, mas o Amazon Redshift é capaz de filtrar as tabelas de junção antes da etapa de verificação e pode, então, pular de forma eficiente os blocos de verificação dessas tabelas. Filtros redundantes não são necessários se você filtrar em uma coluna que é usada na condição de junção.

    Por exemplo, suponha que você deseje juntar SALES e LISTING para localizar tíquetes de venda nos tíquetes listados após dezembro, agrupados por vendedor. Ambas as tabelas são classificadas por data. A consulta a seguir junta as tabelas em sua chave comum e filtra valores listing.listtime maiores que 1º de dezembro.

    select listing.sellerid, sum(sales.qtysold) from sales, listing where sales.salesid = listing.listid and listing.listtime > '2008-12-01' group by 1 order by 1;

    A cláusula WHERE não inclui um predicado para sales.saletime, portanto o mecanismo de execução é forçado a varrer toda a tabela SALES. Se você sabe que o filtro resultará em menos linhas participando da junção, adicione este filtro também. O exemplo a seguir reduz o tempo de execução significativamente.

    select listing.sellerid, sum(sales.qtysold) from sales, listing where sales.salesid = listing.listid and listing.listtime > '2008-12-01' and sales.saletime > '2008-12-01' group by 1 order by 1;
  • Use chaves de classificação na cláusula GROUP BY para que o planejador de consulta possa usar uma agregação mais eficiente. Uma consulta pode se qualificar para agregação de uma fase quando sua lista GROUP BY contiver apenas colunas de chave de classificação, onde uma delas também seja a chave de distribuição. As colunas de chave de classificação na lista GROUP BY devem incluir a primeira chave de classificação, seguida pelas outras chaves de classificação que você deseja usar por ordem de chave de classificação. Por exemplo, é válido usar a primeira chave de classificação, a primeira e segunda chaves de classificação, a primeira, segunda e terceira chaves de classificação e assim por diante. É inválido usar a primeira e a terceira chave de classificação.

    Você pode confirmar o uso da agregação de uma fase executando o comando EXPLAIN e procurando por XN GroupAggregate na etapa de agregação da consulta.

  • Se você usar as duas cláusulas, GROUP BY e ORDER BY, verifique se as colunas estão na mesma ordem em ambas. Ou seja, use a abordagem logo a seguir.

    group by a, b, c order by a, b, c

    Não use a abordagem a seguir.

    group by b, c, a order by a, b, c