Rumah > pangkalan data > tutorial mysql > Bagaimanakah Kami Boleh Mengoptimumkan Pertanyaan Maksimum Mengikut Kumpulan dalam Postgres untuk Mengelakkan Imbasan Jadual Berlebihan?

Bagaimanakah Kami Boleh Mengoptimumkan Pertanyaan Maksimum Mengikut Kumpulan dalam Postgres untuk Mengelakkan Imbasan Jadual Berlebihan?

Linda Hamilton
Lepaskan: 2024-12-29 06:40:11
asal
144 orang telah melayarinya

How Can We Optimize Groupwise Maximum Queries in Postgres to Avoid Excessive Table Scans?

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;
Salin selepas log masuk

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;
Salin selepas log masuk

Faedah Pendekatan Alternatif

Pendekatan alternatif ini menawarkan beberapa kelebihan:

  • Mengurangkan imbasan jadual dengan hanya mengakses baris yang berkaitan dalam jadual pilihan.
  • Menggunakan korelasi yang cekap subqueries untuk mendapatkan semula nilai id maksimum daripada rekod.
  • Mengekalkan integriti rujukan melalui kekangan kunci asing.

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!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan