Mengoptimumkan Pertanyaan Maksimum Mengikut Kumpulan
Pertanyaan yang dimaksudkan bertujuan untuk mendapatkan semula baris dengan nilai id maksimum untuk setiap option_id unik dalam jadual rekod . Walau bagaimanapun, pelaksanaan semasa menunjukkan ketidakcekapan disebabkan oleh imbasan jadual yang berlebihan.
Mengapa Pertanyaan Semasa Tidak Cekap
Isunya terletak pada cantuman gelung bersarang yang digunakan untuk mengenal pasti baris dengan nilai id maksimum. Gabungan ini memerlukan Postgres mengimbas keseluruhan jadual rekod beberapa kali, yang membawa kepada masa pelaksanaan yang tinggi dan penggunaan sumber.
Pendekatan Alternatif menggunakan Jadual Carian
Untuk mengoptimumkan pertanyaan ini , pendekatan alternatif disyorkan: mencipta jadual carian berasingan yang dipanggil pilihan yang memetakan ID pilihan kepada ID maksimum dalam jadual rekod. Memperkenalkan kekangan kunci asing antara records.option_id dan options.option_id akan memastikan integriti rujukan.
CREATE TABLE options ( option_id int PRIMARY KEY, option text UNIQUE NOT NULL ); INSERT INTO options (option_id, option) SELECT DISTINCT option_id, 'option' || option_id FROM records;
Pertanyaan Dioptimumkan menggunakan Subquery Berkorelasi
Dengan jadual pilihan disediakan , pertanyaan asal boleh ditulis semula menggunakan subquery berkorelasi yang menggabungkan dengan cekap dua jadual berdasarkan pada medan option_id.
SELECT o.option_id, (SELECT MAX(id) FROM records WHERE option_id = o.option_id) AS max_id FROM options o ORDER BY o.option_id;
Faedah Pendekatan Alternatif
Pendekatan alternatif ini menawarkan beberapa kelebihan:
Pengoptimuman Tambahan
Menambahkan indeks ke jadual rekod pada (option_id, id DESC NULLS LAST) boleh dipertingkatkan lagi prestasi dengan membenarkan Postgres melakukan imbasan indeks sahaja untuk subkueri.
Atas ialah kandungan terperinci Bagaimanakah Kami Boleh Mengoptimumkan Pertanyaan Maksimum Mengikut Kumpulan dalam Postgres untuk Mengelakkan Imbasan Jadual Berlebihan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!