Optimiza el procesamiento de las consultas

Al evaluar el cálculo que requiere una consulta, ten en cuenta la cantidad de trabajo que se requiere. ¿Cuánto tiempo de CPU se requiere? ¿Estás utilizando funciones como las funciones de JavaScript definidas por el usuario que requieren recursos de CPU adicionales?

Las siguientes prácticas recomendadas proporcionan una guía para controlar el cálculo de consultas.

Evita transformar repetidamente los datos mediante consultas de SQL

Práctica recomendada: Si estás utilizando SQL para realizar operaciones de ETL, evita situaciones en las que transformes repetidamente los mismos datos.

Por ejemplo, si estás utilizando SQL para acortar strings o extraer datos mediante expresiones regulares, es más eficaz materializar los resultados transformados en una tabla de destino. Las funciones como expresiones regulares requieren un cómputo adicional. Es mucho más eficaz consultar la tabla de destino sin la sobrecarga de transformación agregada.

Evita las funciones definidas por el usuario de JavaScript

Práctica recomendada: Evita el uso de funciones definidas por el usuario de JavaScript. Usa UDF nativos en su lugar.

Llamar a un UDF de JavaScript requiere la creación de instancias de un subproceso. La aceleración de este proceso y la ejecución del UDF afectan directamente el rendimiento de las consultas. Si es posible, usa un UDF nativo (SQL) en su lugar.

Usa funciones de agregación aproximadas

Práctica recomendada: si tu caso práctico lo permite, utiliza una función de agregación aproximada.

Si la función de agregación de SQL que estás utilizando tiene una función de aproximación equivalente, la función de aproximación producirá un rendimiento de consulta más rápido. Por ejemplo, el lugar de utilizar COUNT(DISTINCT), usa APPROX_COUNT_DISTINCT(). Para obtener más información, consulta funciones de agregación aproximadas en la referencia de SQL estándar.

También puedes usar las funciones HyperLogLog++ para hacer aproximaciones (incluidas las agregaciones aproximadas personalizadas). Para obtener más información, consulta funciones HyperLogLog en la referencia SQL estándar.

Ordena operaciones de consulta para maximizar el rendimiento

Práctica recomendada: Usa ORDER BY solo en la consulta más externa o dentro de cláusulas de las ventanas (funciones analíticas). Envía las operaciones complejas al final de la consulta.

Si necesitas ordenar los datos, fíltralos primero para reducir el número de valores que debes ordenar. Si ordenas tus datos primero, ordenarás muchos más datos de los necesarios. Es preferible ordenarlos en un subconjunto de datos que ordenarlos todos y aplicarlos a una cláusula LIMIT.

Cuando usas una cláusula ORDER BY, esta debe aparecer solo en la parte más externa de la consulta. Colocar una cláusula ORDER BY en medio de una consulta tiene un gran impacto en el rendimiento, a menos que se utilice en una función de ventana (analítica).

Otra técnica para ordenar tu consulta es enviar las operaciones complejas, como expresiones regulares y funciones matemáticas, al final de la consulta. Nuevamente, esta técnica permite que los datos se reduzcan lo más posible antes de que se realicen las operaciones complejas.

Optimiza tus patrones de unión

Práctica recomendada: Para consultas que unen datos de varias tablas, optimiza tus patrones de combinación. Comienza con la tabla más grande.

Cuando creas una consulta utilizando JOIN, ten en cuenta el orden en el cual estás fusionando los datos. El optimizador de consultas SQL estándar puede determinar qué tabla debe estar en qué lado de la unión, pero todavía se recomienda ordenar las tablas unidas de manera adecuada. La práctica recomendada es colocar primero la tabla más grande, seguida de la más pequeña y luego en tamaño decreciente.

Cuando tienes una tabla grande como lado izquierdo de JOIN y una pequeña al lado derecho de JOIN, se crea una unión de transmisión. Una unión de transmisión envía todos los datos de la tabla más pequeña a cada ranura que procesa la tabla más grande. Se aconseja primero realizar la transmisión.

Para ver el tamaño de las tablas en JOIN, consulta Obtén información sobre las tablas.

Reduce las consultas de partición

Práctica recomendada: Cuando consultas una tabla particionada, usa la seudocolumna _PARTITIONTIME para filtrar las particiones.

Cuando consultas tablas particionadas, usa la pseudocolumna _PARTITIONTIME. Filtrar los datos con _PARTITIONTIME te permite especificar una fecha o período. Por ejemplo, la siguiente cláusula WHERE usa la pseudocolumna _PARTITIONTIME para especificar particiones entre el 1 de enero de 2016 y el 31 de enero de 2016:

WHERE _PARTITIONTIME
BETWEEN TIMESTAMP(“20160101”)
    AND TIMESTAMP(“20160131”)

La consulta procesa datos solo en las particiones indicadas en el rango de fechas. Filtrar tus particiones mejora el rendimiento de las consultas y reduce los costos.

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Si necesitas ayuda, visita nuestra página de asistencia.