首頁 > 後端開發 > php教程 > 在 PostgreSQL 中應用 LIMIT 之前如何有效取得總行數?

在 PostgreSQL 中應用 LIMIT 之前如何有效取得總行數?

Patricia Arquette
發布: 2024-12-19 02:22:11
原創
418 人瀏覽過

How to Efficiently Get Total Row Count Before Applying LIMIT in PostgreSQL?

應用 LIMIT 之前確定結果數的最佳方法

在資料庫查詢中,在應用 LIMIT 之前確定結果總數對於分頁至關重要。目前,一種常見的方法涉及執行查詢兩次:一次對所有結果進行計數,再次進行限制以檢索所需的頁面。然而,這種方法效率較低。

幸運的是,PostgreSQL 8.4 引入了更有效率的解決方案:視窗函數。透過使用視窗函數,您可以在單一查詢中檢索總結果計數和有限結果。

SELECT foo
     , count(*) OVER() AS full_count
FROM   bar
WHERE  <some condition>
ORDER  BY <some col>
LIMIT  <pagesize>
OFFSET <offset>;
登入後複製

請注意,雖然此方法提供了所需的信息,但它的計算成本可能很高,因為所有即使行將被 LIMIT 排除,也必須對其進行處理。

SELECT 查詢中的事件序列

理解序列SELECT 查詢中的事件可以幫助理解視窗函數的操作方式。 Postgres 中的操作順序如下:

  1. 依照WHERE 子句過濾行
  2. 應用視窗函數
  3. 依照ORDER BY 對結果進行排序
  4. 根據LIMIT和限制結果OFFSET

計數檢索的替代方法

除了視窗函數之外,還有其他方法來擷取受影響的行計數:
  • plpgsql
  • :取得診斷integer_var = ROW_COUNT;
  • PHP
  • : pg_num_rows

這些方法提供受查詢影響的行數,而不是 LIMIT 應用之前的完整計數。

相關資源:
  • [最佳化查詢大表上的OFFSET](https://dba.stackexchange.com/questions/128089/optimize-query-with-offset-on-large- table)
  • [計算受批量查詢影響的行數PostgreSQL](https://stackoverflow.com/questions/4644316/calculate-number-of-rows-affected-by-batch-query-in-postgresql)

以上是在 PostgreSQL 中應用 LIMIT 之前如何有效取得總行數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板