Prácticas recomendadas de Amazon Redshift para el diseño de consultas - Amazon Redshift

Prácticas recomendadas de Amazon Redshift para el diseño de consultas

Para maximizar el rendimiento de las consultas, siga estas recomendaciones en el momento de crear las consultas.

  • Diseñe las tablas según las prácticas recomendadas y, así, generará una base sólida para el rendimiento de las consultas. Para obtener más información, consulte Prácticas recomendadas de Amazon Redshift para el diseño de tablas.

  • Evite usar select *. Incluya solamente las columnas que necesita.

  • Utilice una expresión Expresión condicional CASE para realizar agregaciones complejas, en lugar de seleccionar de la misma tabla varias veces.

  • No utilice combinaciones cruzadas a menos que sea absolutamente necesario. Estas combinaciones sin una condición de combinación dan lugar a un producto cartesiano de dos tablas. Por lo general, las combinaciones cruzadas se ejecutan como combinaciones de bucles anidados, que son los tipos de combinación más lentos.

  • Utilice subconsultas en los casos donde una tabla en la consulta se utilice solamente para condiciones de predicado y la subconsulta devuelva una cantidad pequeña de filas (menos de 200). En el siguiente ejemplo, se utiliza una subconsulta para evitar combinar la tabla LISTING.

    select sum(sales.qtysold) from sales where salesid in (select listid from listing where listtime > '2008-12-26');
  • Utilice predicados para restringir el conjunto de datos tanto como sea posible.

  • En el predicado, utilice los operadores menos costosos que pueda. Los operadores Condición de comparación son preferibles a los operadores LIKE. Se prefieren incluso los operadores LIKE a los SIMILAR TO o a los Operadores POSIX.

  • Evite utilizar funciones en los predicados de consulta. Usarlos puede elevar el costo de la consulta al necesitar grandes cantidades de filas para resolver los pasos intermedios de la consulta.

  • Si es posible, utilice una cláusula WHERE para restringir el conjunto de datos. El planificador de consultas puede utilizar el orden de las filas para determinar qué registros coinciden con los criterios y, así, evitar examinar grandes cantidades de bloques de disco. Sin esto, el motor de ejecución de la consulta debe examinar en su totalidad todas las columnas que participan.

  • Agregue predicados para filtrar tablas que participen en combinaciones, aun cuando se apliquen los mismos filtros. La consulta devuelve el mismo conjunto de resultados, pero Amazon Redshift puede filtrar las tablas combinadas antes del paso de análisis y, a continuación, puede omitir de manera eficiente el análisis de bloques de esas tablas. No se necesitan filtros redundantes si usted filtra una columna que se usa en la condición de combinación.

    Por ejemplo, imagine que desea combinar SALES y LISTING para encontrar ventas de tickets después de diciembre, agrupadas por vendedor. Ambas tablas se ordenan por fecha. La siguiente consulta combina las tablas según su clave común y filtra por valores listing.listtime mayores al 1. º de diciembre.

    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;

    La cláusula WHERE no incluye un predicado para sales.saletime, por lo que el motor de ejecución debe examinar toda la tabla SALES. Si sabe que el filtro generaría que menos filas participen de la combinación, agregue también el filtro. En el siguiente ejemplo, se reduce considerablemente el tiempo de ejecución.

    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;
  • Utilice las claves de ordenación en la cláusula GROUP BY para que el planificador de consultas pueda utilizar la agregación de manera más eficiente. Una consulta puede calificar para agregación en una fase cuando la lista GROUP BY tiene solamente columnas de clave de ordenación, una de las cuales es también la clave de distribución. Las columnas con clave de ordenación en la lista GROUP BY deben incluir la primera clave de ordenación y, luego, las demás claves de ordenación que desee usar en el orden de la clave de ordenación. Por ejemplo, es válido utilizar la primera clave de ordenación, la primera y la segunda claves de ordenación, la primera, la segunda y la tercera claves de ordenación y, así, sucesivamente. No es válido usar la primera y la tercera claves de ordenación.

    Puede confirmar el uso de agregación en una fase al ejecutar el comando EXPLAIN y buscar XN GroupAggregate en el paso de agregación de la consulta.

  • Si utiliza las cláusulas GROUP BY y ORDER BY, asegúrese de poner las columnas en el mismo orden en ambas cláusulas. Es decir, utilice el siguiente enfoque.

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

    No utilice el siguiente enfoque.

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