資料庫資料分頁通常需要決定總頁數以渲染分頁控制項。通常,這需要執行兩個單獨的查詢:一個使用COUNT()取得總數,另一個使用LIMIT檢索目前頁面的資料。
這種方法效率低。幸運的是,在PostgreSQL中有一個更好的方法來取得應用LIMIT之前的總數:使用視窗函數。
PostgreSQL 8.4中引入的視窗函數允許我們對由「視窗」定義的資料集執行計算。透過指定合適的窗口,我們可以檢索總數而不會影響LIMIT操作。
考慮以下查詢:
<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>
這裡,full_count
提供了應用LIMIT之前的總行數。
注意: 以這種方式使用視窗函數可能比傳統的兩查詢方法在計算上更昂貴。這是因為必須計算所有行,而不管分頁參數如何。
在某些情況下,無需在LIMIT之前取得總數。一種替代方法是:
以上是在 PostgreSQL 查詢中應用 LIMIT 之前如何有效確定總行數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!