Rumah > pangkalan data > tutorial mysql > Bolehkah Postgres Mengoptimumkan Pertanyaan MAX Mengikut Kumpulan Tanpa Imbasan Jadual Penuh?

Bolehkah Postgres Mengoptimumkan Pertanyaan MAX Mengikut Kumpulan Tanpa Imbasan Jadual Penuh?

Linda Hamilton
Lepaskan: 2025-01-02 12:38:39
asal
378 orang telah melayarinya

Can Postgres Optimize Groupwise MAX Queries Without a Full Table Scan?

Bolehkah Postgres Mengoptimumkan Pertanyaan Maksimum Mengikut Kumpulan Tanpa Mengimbas Semua Baris?

Postgres tidak mempunyai pendekatan langsung untuk memaksimumkan pertanyaan kumpulan dengan cekap, seperti yang terbukti daripada imbasan meja penuh mahal diperhatikan dalam yang diberikan pertanyaan.

PENYELESAIAN

Untuk mengelakkan imbasan yang berlebihan, pertimbangkan untuk menggunakan jadual carian untuk pilihan dan memautkannya ke jadual rekod melalui option_id. Mewujudkan kekangan kunci asing antara jadual ini akan mengekalkan integriti rujukan.

SQL UNTUK PENCIPTAAN JADUAL LOOKUP:

CREATE TABLE options (
  option_id int PRIMARY KEY
, option    text UNIQUE NOT NULL
);
Salin selepas log masuk

Sisipan Data daripada Rekod Sedia Ada Jadual:

INSERT INTO options
SELECT DISTINCT option_id, 'option' || option_id
FROM   records;
Salin selepas log masuk

Pertanyaan Dioptimumkan menggunakan Subquery:

SELECT option_id, (SELECT max(id)
                   FROM   records
                   WHERE  option_id = o.option_id) AS max_id
FROM   options o
ORDER  BY 1;
Salin selepas log masuk

Sebagai alternatif, subkueri yang dioptimumkan boleh mendapatkan id maksimum:

SELECT option_id, (SELECT id
                   FROM   records
                   WHERE  option_id = o.option_id
                   ORDER  BY id DESC NULLS LAST
                   LIMIT  1) AS max_id
FROM   options o
ORDER  BY 1;
Salin selepas log masuk

Indeks Optimum untuk Pertanyaan Prestasi:

CREATE INDEX ON records (option_id, id DESC NULLS LAST);
Salin selepas log masuk

Pendekatan yang dioptimumkan ini meningkatkan pelaksanaan pertanyaan dengan ketara dengan menggunakan imbasan indeks atau imbasan indeks sahaja untuk kedua-dua jadual carian dan jadual utama, menghasilkan prestasi unggul berbanding imbasan jadual penuh .

Atas ialah kandungan terperinci Bolehkah Postgres Mengoptimumkan Pertanyaan MAX Mengikut Kumpulan Tanpa Imbasan Jadual Penuh?. 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