首頁 >後端開發 >php教程 >如何在應用 LIMIT 之前有效率地檢索 PostgreSQL 中的總結果計數?

如何在應用 LIMIT 之前有效率地檢索 PostgreSQL 中的總結果計數?

DDD
DDD原創
2024-12-13 22:48:11696瀏覽

How to Efficiently Retrieve Total Result Count in PostgreSQL Before Applying LIMIT?

限制應用之前檢索結果計數的最佳方法

在資料庫分頁中,確定頁總數對於渲染分頁控制項至關重要。但是,為此目的執行單獨的計數和限制查詢可能效率很低。本文探討了一種在不應用資料庫限制的情況下獲取結果計數的改進技術。

Postgres 視窗函數

PostgreSQL 版本 8.4 及更高版本引入了視窗函數,支援在分區子集上計算聚合函數資料。這使我們能夠確定總計數並在單一查詢中檢索有限的結果。

SELECT foo,
       COUNT(*) OVER() AS full_count
FROM bar
WHERE <some condition>
ORDER BY <some col>
LIMIT <pagesize>
OFFSET <offset>;

但是,此方法可能會產生額外的效能開銷,因為它需要計算所有符合條件的行,可能會影響大量的效能表或 OFFSET 值接近總行數。

結果計數的替代選項

在效能受到關注的情況下,替代方案可以採用獨立於 OFFSET 和 LIMIT 應用程式的方法來取得受影響行的最終計數。 Postgres 內部簿記追蹤此訊息,某些客戶端可以存取這些資訊。

  • PL/pgSQL:使用 GET DIAGNOSTICS 執行 SQL 指令後擷取行計數。
  • PHP:使用 pg_num_rows函數決定受影響的行數rows.

其他資源

  • [計算受批次查詢影響的行數PostgreSQL](https://dba.stackexchange.c om/questions/247142/calculate-number-of-rows-affected-by-batch-query-in-postgresql)

以上是如何在應用 LIMIT 之前有效率地檢索 PostgreSQL 中的總結果計數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn