Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Menentukan Jumlah Kiraan Baris Dengan Cekap Sebelum Menggunakan LIMIT dalam Pertanyaan PostgreSQL?

Bagaimanakah Saya Boleh Menentukan Jumlah Kiraan Baris Dengan Cekap Sebelum Menggunakan LIMIT dalam Pertanyaan PostgreSQL?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-20 12:08:10455semak imbas

How Can I Efficiently Determine the Total Row Count Before Applying LIMIT in PostgreSQL Queries?

Dapatkan jumlah baris dengan cekap sebelum LIMIT dalam pertanyaan PostgreSQL

Paging data pangkalan data biasanya memerlukan penentuan jumlah halaman untuk membuat kawalan paging. Biasanya, ini memerlukan menjalankan dua pertanyaan berasingan: satu menggunakan COUNT() untuk mendapatkan jumlah dan satu lagi menggunakan LIMIT untuk mendapatkan semula data halaman semasa.

Kaedah ini tidak cekap. Nasib baik, terdapat cara yang lebih baik dalam PostgreSQL untuk mendapatkan jumlah sebelum menggunakan LIMIT: gunakan fungsi tetingkap.

Fungsi tetingkap SQL

Fungsi tetingkap yang diperkenalkan dalam PostgreSQL 8.4 membolehkan kami melakukan pengiraan pada set data yang ditakrifkan oleh "tetingkap". Dengan menentukan tetingkap yang sesuai, kami boleh mendapatkan jumlahnya tanpa menjejaskan operasi LIMIT.

Pertimbangkan pertanyaan berikut:

<code class="language-sql">SELECT foo, COUNT(*) OVER() AS full_count
FROM bar
WHERE <some condition="">
ORDER BY <some col="">
LIMIT <pagesize>
OFFSET <offset>;</code>

Di sini, full_count memberikan jumlah bilangan baris sebelum LIMIT digunakan.

Nota: Menggunakan fungsi tetingkap dengan cara ini boleh menjadi lebih mahal dari segi pengiraan daripada pendekatan dua pertanyaan tradisional. Ini kerana semua baris mesti dikira tanpa mengira parameter halaman.

Kaedah alternatif untuk jumlah nombor

Dalam sesetengah kes tidak perlu mendapatkan jumlah sebelum LIMIT. Alternatifnya ialah:

  1. Jalankan pertanyaan menggunakan LIMIT dan OFFSET.
  2. Gunakan fungsi klien untuk mengira bilangan baris yang terjejas (cth. DAPATKAN DIAGNOSTIK dalam PL/pgSQL atau pg_num_rows dalam PHP).

Pertimbangan lain

  1. Susunan acara dalam pertanyaan SQL mempengaruhi prestasi. Operasi LIMIT dan OFFSET digunakan selepas penapisan, pengumpulan dan operasi lain.
  2. Menggunakan LIMIT dan OFFSET pada meja besar adalah tidak cekap. Pertimbangkan untuk menggunakan kaedah lain untuk prestasi yang lebih baik.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan Jumlah Kiraan Baris Dengan Cekap Sebelum Menggunakan LIMIT dalam Pertanyaan PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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