Heim  >  Artikel  >  Web-Frontend  >  Langsame SQL-Abfragen? Steigern Sie die Leistung Ihrer App mit dieser Technik

Langsame SQL-Abfragen? Steigern Sie die Leistung Ihrer App mit dieser Technik

DDD
DDDOriginal
2024-09-25 06:30:32296Durchsuche

Slow SQL Queries? Boost Your App

Die Herausforderung

In meiner App (React + Spring Boot + Oracle) führte der Umgang mit großen Datenmengen zu einer frustrierend langsamen Verarbeitungszeit. Ich brauchte eine Lösung, um die Leistung zu beschleunigen, ohne Kompromisse bei der Genauigkeit oder Vollständigkeit einzugehen.

Die Lösung: NTILE + Parallelverarbeitung

NTILE ist eine leistungsstarke SQL-Fensterfunktion, die dazu dient, eine Ergebnismenge in eine bestimmte Anzahl ungefähr gleich großer Blöcke, sogenannte „Kacheln“, zu unterteilen. Jeder Zeile wird basierend auf ihrer Position in der geordneten Menge eine Partitionsnummer zugewiesen.

Durch die Verwendung von NTILE habe ich die Abfrageergebnisse in überschaubare Blöcke aufgeteilt und diese Partitionen parallel verarbeitet. Dieser Ansatz ermöglichte es mir, Daten gleichzeitig abzurufen und zu verarbeiten, wodurch die Wartezeiten erheblich verkürzt wurden.

Hier ist ein praktisches Beispiel, wie Sie dies umsetzen können:

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)

Im obigen SQL-Snippet:

  • NTILE(2) teilt die Daten in zwei gleiche Teile auf, die basierend auf sales_id sortiert werden.
  • Ersetzen Sie :partitionNumber durch 1 oder 2, um Daten von der entsprechenden Partition abzurufen.

Im Frontend können Sie die Parallelverarbeitung verwenden, um jede Partition effizient abzurufen:

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);
    }
}

In diesem Code:

  • fetchPartition ruft Daten für eine bestimmte Partition ab.
  • fetchData führt beide Abrufvorgänge parallel aus und verarbeitet die kombinierten Ergebnisse.

Wie auch Sie es schaffen können

  • Identifizieren Sie die schweren Abfragen: Finden Sie die Abfragen, die Ihre App verlangsamen.
  • NTILE anwenden: Verwenden Sie die NTILE-Funktion, um die Abfrageergebnisse in kleinere Teile zu unterteilen.
  • Parallele Verarbeitung: Führen Sie diese kleineren Abfragen parallel aus und nutzen Sie so die Fähigkeit Ihrer App, gleichzeitige Aufgaben zu verarbeiten.

Wenn Sie die Leistung Ihrer datenintensiven Anwendungen steigern möchten, probieren Sie diese Methode aus. Dies ist eine intelligente und effektive Möglichkeit, Ihre Anfragen nicht länger, sondern härter bearbeiten zu lassen.

Wichtige Überlegung

Bei der Bearbeitung gleichzeitiger Anfragen kann der Bedarf an Datenbankverbindungen erheblich werden. Diese starke Auslastung der Verbindungen kann Ihre Datenbank belasten und möglicherweise zu Leistungsengpässen führen. Es ist wichtig, die Anzahl gleichzeitiger Anfragen zu überwachen und zu verwalten, um sicherzustellen, dass Ihre Datenbank reaktionsfähig bleibt und effizient arbeitet.

Das obige ist der detaillierte Inhalt vonLangsame SQL-Abfragen? Steigern Sie die Leistung Ihrer App mit dieser Technik. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Kennst du Git wirklich?Nächster Artikel:Kennst du Git wirklich?