"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Consultas SQL lentas? Aumente el rendimiento de su aplicación con esta técnica

¿Consultas SQL lentas? Aumente el rendimiento de su aplicación con esta técnica

Publicado el 2024-11-06
Navegar:888

Slow SQL Queries? Boost Your App

El desafío

En mi aplicación (React Spring Boot Oracle), lidiar con grandes conjuntos de datos generó un tiempo de procesamiento frustrantemente lento. Necesitaba una solución para acelerar el rendimiento sin comprometer la precisión ni la integridad.

La solución: procesamiento paralelo NTILE

NTILE es una potente función de ventana SQL diseñada para dividir un conjunto de resultados en un número específico de fragmentos de tamaño aproximadamente igual, conocidos como "mosaicos". A cada fila se le asigna un número de partición según su posición en el conjunto ordenado.

Al usar NTILE, dividí los resultados de la consulta en partes manejables y procesé estas particiones en paralelo. Este enfoque me permitió recuperar y manejar datos simultáneamente, lo que redujo significativamente los tiempos de espera.

Aquí tienes un ejemplo práctico de cómo implementar esto:

WITH PartitionedSales AS (
    SELECT 
        sales_id,
        sales_amount,
        sales_date,
        NTILE(2) OVER (ORDER BY sales_id) AS partition_number -- Assigns a partition number (1 or 2) to each row
    FROM 
        sales
    WHERE 
        sales_date BETWEEN '2023-01-01' AND '2023-12-31'
)
SELECT * 
FROM PartitionedSales
WHERE partition_number = :partitionNumber -- Replace :partitionNumber with the actual partition number (1 or 2)

En el fragmento de SQL anterior:

  • NTILE(2) divide los datos en dos partes iguales que se ordenarán según sales_id.
  • Reemplace :partitionNumber con 1 o 2 para recuperar datos de la partición correspondiente.

En la interfaz, puedes utilizar el procesamiento paralelo para recuperar cada partición de manera eficiente:

async function fetchPartition(partitionNumber) {
    const response = await fetch('/api/sales?partition='   partitionNumber});
    return response.json();
}

async function fetchData() {
    try {
        const [partition1, partition2] = await Promise.all([
            fetchPartition(1), // Fetch the first partition
            fetchPartition(2)  // Fetch the second partition
        ]);

        // Combine and process results
        const combinedResults = [...partition1, ...partition2];
        processResults(combinedResults);
    } catch (error) {
        console.error('Error fetching data:', error);
    }
}

En este código:

  • fetchPartition recupera datos de una partición específica.
  • fetchData ejecuta ambas operaciones de recuperación en paralelo y procesa los resultados combinados.

Cómo puedes hacerlo tú también

  • Identifique las consultas pesadas: encuentre las consultas que ralentizan su aplicación.
  • Aplicar NTILE: utilice la función NTILE para dividir los resultados de la consulta en partes más pequeñas.
  • Procesamiento paralelo: ejecute estas consultas más pequeñas en paralelo, aprovechando la capacidad de su aplicación para manejar tareas simultáneas.

Si buscas mejorar el rendimiento de tus aplicaciones con muchos datos, prueba este método. Es una forma inteligente y eficaz de hacer que sus consultas funcionen mejor y no por más tiempo.

Consideración importante

Al manejar solicitudes simultáneas, la demanda de conexiones de bases de datos puede volverse significativa. Este uso intensivo de conexiones puede sobrecargar su base de datos, lo que podría generar cuellos de botella en el rendimiento. Es esencial monitorear y administrar la cantidad de solicitudes simultáneas para garantizar que su base de datos siga respondiendo y funcione de manera eficiente.

Declaración de liberación Este artículo se reproduce en: https://dev.to/ritesh_rungta_e849b30e0b6/slow-sql-queries-boost-your-apps-performance-with-this-technique-3gnp?1 Si hay alguna infracción, comuníquese con Study_golang@163 .com para eliminarlo
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3