Pertanyaan SQL Lambat? Tingkatkan Prestasi Apl Anda dengan Teknik Ini

DDD
Lepaskan: 2024-09-25 06:30:32
asal
287 orang telah melayarinya

Slow SQL Queries? Boost Your App

Cabaran

Dalam apl saya (React + Spring Boot + Oracle), berurusan dengan set data yang besar membawa kepada masa pemprosesan yang sangat perlahan. Saya memerlukan penyelesaian untuk mempercepatkan prestasi tanpa menjejaskan ketepatan atau kesempurnaan.

Penyelesaian: NTILE + Pemprosesan Selari

NTILE ialah fungsi tetingkap SQL berkuasa yang direka untuk membahagikan set hasil ke dalam bilangan ketulan yang bersaiz lebih kurang sama, yang dikenali sebagai "jubin." Setiap baris diberikan nombor partition berdasarkan kedudukannya dalam set tersusun.

Dengan menggunakan NTILE, saya membahagikan hasil pertanyaan kepada bahagian yang boleh diurus dan memproses partition ini secara selari. Pendekatan ini membolehkan saya mengambil dan mengendalikan data secara serentak, dengan ketara mengurangkan masa menunggu.

Berikut ialah contoh praktikal cara melaksanakan perkara ini:

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)

Salin selepas log masuk

Dalam coretan SQL di atas:

  • NTILE(2) membahagikan data kepada dua bahagian yang sama yang akan diisih berdasarkan sales_id.
  • Gantikan :partitionNumber dengan 1 atau 2 untuk mengambil data daripada partition yang sepadan.

Di bahagian hadapan, anda boleh menggunakan pemprosesan selari untuk mengambil setiap partition dengan cekap:

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

Salin selepas log masuk

Dalam kod ini:

  • fetchPartition mendapatkan semula data untuk partition tertentu.
  • fetchData menjalankan kedua-dua operasi pengambilan secara selari dan memproses hasil gabungan.

Bagaimana Anda Boleh Melakukannya Juga

  • Kenal pasti Pertanyaan Berat: Cari pertanyaan yang memperlahankan apl anda.
  • Gunakan NTILE: Gunakan fungsi NTILE untuk membahagikan hasil pertanyaan kepada bahagian yang lebih kecil.
  • Pemprosesan Selari: Laksanakan pertanyaan yang lebih kecil ini secara selari, memanfaatkan keupayaan apl anda untuk mengendalikan tugas serentak.

Jika anda ingin meningkatkan prestasi dalam aplikasi berat data anda, cuba kaedah ini. Ini cara yang bijak dan berkesan untuk membuat pertanyaan anda bekerja lebih keras, bukan lagi.

Pertimbangan Penting

Apabila mengendalikan permintaan serentak, permintaan pada sambungan pangkalan data boleh menjadi ketara. Penggunaan sambungan yang berat ini boleh menjejaskan pangkalan data anda, yang berpotensi membawa kepada kesesakan prestasi. Adalah penting untuk memantau dan mengurus bilangan permintaan serentak untuk memastikan pangkalan data anda kekal responsif dan berfungsi dengan cekap.

Atas ialah kandungan terperinci Pertanyaan SQL Lambat? Tingkatkan Prestasi Apl Anda dengan Teknik Ini. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!