Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Prácticas recomendadas para diseñar consultas de Amazon Redshift
En esta sección se brinda información general sobre las prácticas recomendadas para diseñar consultas. Le recomendamos que siga las prácticas recomendadas de esta sección para lograr un rendimiento y una eficacia óptimos en las consultas.
Recomendación de evitar usar la instrucción SELECT * FROM
Le recomendamos que evite el uso de la instrucción SELECT * FROM. En su lugar, enumere siempre las columnas para su análisis. Esto reduce el tiempo de ejecución de las consultas y los costos de los análisis de las consultas de Amazon Redshift Spectrum.
Ejemplo de lo que se debe evitar
select * from sales;
Ejemplo de práctica recomendada
select sales_date, sales_amt from sales;
Identificación de los problemas con las consultas
Le recomendamos que consulte la vista STL_ALERT_EVENT_LOG para identificar y corregir posibles problemas con la consulta.
Obtención de información resumida sobre la consulta
Le recomendamos que use las vistas SVL_QUERY_SUMMARY y SVL_QUERY_REPORT para obtener información resumida sobre las consultas. Puede utilizar esta información para optimizar sus consultas.
Recomendación de evitar las combinaciones cruzadas
Le recomendamos que evite usar las combinaciones cruzadas a menos que sea absolutamente necesario. Si una condición de combinación, las combinaciones cruzadas son 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).
Ejemplo de lo que se debe evitar
select c.c_name, n.n_name from tpch.customer c, tpch.nation n;
Ejemplo de práctica recomendada
select c.c_name, n.n_name from tpch.customer c, join tpch.nation n on n.n_nationkey = c.c_nationkey;
Recomendación de evitar las funciones en los predicados de las consultas
Le recomendamos que evite el uso de las funciones en los predicados de las consultas. El uso de funciones en los predicados de las consultas puede afectar negativamente al rendimiento, ya que las funciones suelen agregar una sobrecarga de procesamiento adicional a cada fila y suelen ralentizar la ejecución general de la consulta.
Ejemplo de lo que se debe evitar
select sum(o_totalprice) from tpch.orders where datepart(year, o_orderdate) = 1992;
Ejemplo de práctica recomendada
select sum(o_totalprice) from tpch.orders where o_orderdate between '1992-01-01' and '1992-12-31';
Recomendación de evitar las conversiones de tipo innecesarias
Le recomendamos que evite usar las conversiones de tipo innecesarias en las consultas, ya que la conversión de tipos de datos requiere tiempo y recursos y ralentiza la ejecución de las consultas.
Ejemplo de lo que se debe evitar
select sum(o_totalprice) from tpch.orders where o_ordertime::date = '1992-01-01';
Ejemplo de práctica recomendada
select sum(o_totalprice) from tpch.orders where o_ordertime between '1992-01-01 00:00:00' and '1992-12-31 23:59:59';
Uso de expresiones CASE en las agregaciones complejas
Le recomendamos que utilice una expresión CASE para realizar agregaciones complejas en lugar de seleccionar de la misma tabla varias veces.
Ejemplo de lo que se debe evitar
select sum(sales_amt) as us_sales from sales where country = 'US'; select sum(sales_amt) as ca_sales from sales where country = 'CA';
Ejemplo de práctica recomendada
select sum(case when country = 'US' then sales_amt end) as us_sales, sum(case when country = 'CA' then sales_amt end) as ca_sales from sales;
Uso de subconsultas
Le recomendamos que 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).
Ejemplo de lo que se debe evitar
Si una subconsulta devuelve menos de 200 filas:
select sum(order_amt) as total_sales from sales where region_key IN (select region_key from regions where state = 'CA');
Ejemplo de práctica recomendada
Si una subconsulta devuelve 200 filas o más:
select sum(o.order_amt) as total_sales from sales o join regions r on r.region_key = o.region_key and r.state = 'CA';
Uso de predicados
Le recomendamos que utilice predicados para restringir el conjunto de datos tanto como sea posible. En SQL, los predicados se utilizan para filtrar y restringir los datos que se devuelven en una consulta. Al especificar las condiciones en un predicado, puede especificar qué filas deben incluirse en los resultados de la consulta en función de las condiciones especificadas. Esto le permite recuperar solo los datos que le interesan y mejora la eficacia y precisión de las consultas. Para obtener más información, consulte Condiciones en la documentación de Amazon Redshift.
Adición de predicados para filtrar tablas con combinaciones
Le recomendamos que agregue predicados para filtrar tablas que participen en combinaciones, aun cuando se apliquen los mismos filtros. El uso de predicados para filtrar tablas con combinaciones en SQL puede mejorar el rendimiento de las consultas, ya que reduce la cantidad de datos que se deben procesar y el tamaño del conjunto de resultados intermedios. Al especificar las condiciones de la operación de combinación en la cláusula WHERE, el motor de ejecución de consultas puede eliminar las filas que no coincidan con las condiciones antes de combinarlas. En consecuencia, se reduce el tamaño del conjunto de resultados y se incrementa la velocidad de las consultas.
Ejemplo de lo que se debe evitar
select p.product_name, sum(o.order_amt) from sales o join product p on r.product_key = o.product_key where o.order_date > '2022-01-01';
Ejemplo de práctica recomendada
select p.product_name, sum(o.order_amt) from sales o join product p on p.product_key = o.product_key and p.added_date > '2022-01-01' where o.order_date > '2022-01-01';
Uso de los operadores menos costosos para los predicados
En el predicado, utilice los operadores menos costosos que pueda. Los operadores de condiciones de comparación son preferibles a los operadores LIKE. Los operadores LIKE siguen siendo preferibles a los operadores SIMILAR TO o POSIX.
Uso de las claves de clasificación en las cláusulas GROUP BY
Utilice las claves de clasificación en la cláusula GROUP BY para que el planificador de consultas pueda utilizar la agrupación de manera más eficiente. Una consulta puede considerarse para la agregación en una fase cuando la lista GROUP
BY tiene solamente columnas de clave de clasificación, una de las cuales es también la clave de distribución. Las columnas con clave de clasificación en la lista GROUP BY deben incluir la primera clave de clasificación y, luego, las demás claves de clasificación que desee usar en el orden de la clave de clasificación.
Recomendación de aprovechar las vistas materializadas
Si es posible, reescriba la consulta sustituyendo el código complejo por una vista materializada, lo que mejorará considerablemente el rendimiento de la consulta. Para obtener más información, consulte Creación de vistas materializadas en Amazon Redshift en la documentación de Amazon Redshift.
Precaución con las columnas de las cláusulas GROUP BY y ORDER BY
Si utiliza las cláusulas GROUP BY y ORDER BY, asegúrese de colocar las columnas en el mismo orden en ambas cláusulas GROUP BY y ORDER BY. GROUP BY requiere implícitamente que los datos estén ordenados. Si la cláusula ORDER
BY es diferente, los datos se deben ordenar dos veces.
Ejemplo de lo que se debe evitar
select a, b, c, sum(d) from a_table group by b, c, a order by a, b, c
Ejemplo de práctica recomendada
select a, b, c, sum(d) from a_table group by a, b, c order by a, b, c