Optimización de consultas

Introducción al modelado de datos en Snowflake

Nuno Rocha

Director of Engineering

Orden de ejecución de la consulta

Orden de ejecución de la consulta, consulta completa

Introducción al modelado de datos en Snowflake

Orden de ejecución de la consulta (1)

Orden de ejecución de la consulta; FROM

Introducción al modelado de datos en Snowflake

Orden de ejecución de la consulta (2)

Orden de ejecución de la consulta; JOIN

Introducción al modelado de datos en Snowflake

Orden de ejecución de la consulta (3)

Orden de ejecución de la consulta; WHERE

Introducción al modelado de datos en Snowflake

Orden de ejecución de la consulta (4)

Orden de ejecución de la consulta; AGGREGATIONS

Introducción al modelado de datos en Snowflake

Orden de ejecución de la consulta (5)

Orden de ejecución de la consulta; HAVING

Introducción al modelado de datos en Snowflake

Orden de ejecución de la consulta (6)

Orden de ejecución de la consulta; SORT

Introducción al modelado de datos en Snowflake

Orden de ejecución de la consulta (7)

Orden de ejecución de la consulta; LIMIT

Introducción al modelado de datos en Snowflake

Orden de ejecución de la consulta (8)

Orden final de ejecución de la consulta

  • MEJORES PRÁCTICAS:
    • Evita usar SELECT *; especifica solo las columnas necesarias
    • Aplica LIMIT para reducir el volumen de datos
    • Usa WHERE pronto para filtrar filas y ahorrar memoria
    • Emplea GROUP BY con agregaciones sobre datos acotados para optimizar el proceso
Introducción al modelado de datos en Snowflake

Subconsultas

Representación de subconsulta

Introducción al modelado de datos en Snowflake

Subconsultas

Modelo de datos del programa de fidelidad de la cadena hotelera

Introducción al modelado de datos en Snowflake

Subconsultas

  • Consulta todas las personas alojadas con más de 1000 puntos de fidelidad
SELECT *
FROM guests
WHERE id IN (SELECT guest_id 
                  FROM loyalty_program 
                  WHERE loyalty_points > 1000);
Introducción al modelado de datos en Snowflake

Expresiones de tabla comunes

CTE

Introducción al modelado de datos en Snowflake

Expresiones de tabla comunes

  • Consulta los detalles de la última reserva
WITH latest_booking AS (
    SELECT guest_id, 
           MAX(checkout_date) AS latest_checkout
    FROM booking_details
    GROUP BY guest_id
)
SELECT bd.*, 
       bd.checkout_date AS latest_booking_date
FROM booking_details bd
    JOIN latest_booking lb 
        ON bd.guest_id = lb.guest_id 
        AND bd.checkout_date = lb.latest_checkout;
Introducción al modelado de datos en Snowflake

CTE y subconsultas

CTE

  • Pros

    • Mejora la legibilidad en consultas complejas
    • Permite reutilizar dentro de la misma consulta
    • Ordena mejor las consultas SQL
  • Contras

    • Puede añadir sobrecarga de rendimiento
    • Limitada al ámbito de una sola consulta

Subconsultas

  • Pros

    • Simples y directas para usos puntuales
    • Flexibles en distintas partes de una sentencia SQL
  • Contras

    • Con mucha complejidad reducen la legibilidad
    • Posibles problemas de rendimiento con anidaciones
Introducción al modelado de datos en Snowflake

Visualizar los tiempos de ejecución de consultas

Visualización de tiempos de ejecución de consultas

Introducción al modelado de datos en Snowflake

Resumen de términos y funciones

  • Optimización de consultas: Ajuste fino de consultas para maximizar eficiencia y rendimiento
  • Subconsulta: Consulta pequeña dentro de otra que enfoca datos específicos
  • Expresiones de tabla comunes (CTE): Tabla virtual temporal durante una consulta
  • WITH .. AS: Comando SQL para definir una CTE
  • LIMIT: Clausula SQL que limita el número de filas del resultado
  • HAVING: Clausula SQL para filtrar datos agregados con funciones como SUM, MAX, etc.
  • WHERE: Clausula SQL para filtrar filas antes de agrupar y así mejorar la eficiencia
Introducción al modelado de datos en Snowflake

Plantillas de CTE y subconsulta de ejemplo

  • Subconsulta
SELECT *
FROM table_name
WHERE column_name IN (SELECT column_name 
                  FROM table_name
                  WHERE column_name condition value);
  • CTE
WITH latest_booking_dates AS (
    SELECT column_name
    FROM table_name)
SELECT *
FROM table_name a
    JOIN other_table_name b 
    ON a.key_column = b.key_column;
Introducción al modelado de datos en Snowflake

¡Vamos a practicar!

Introducción al modelado de datos en Snowflake

Preparing Video For Download...