高效率分頁需要知道結果總數才能準確顯示分頁控制項。 傳統方法涉及兩個單獨的查詢:一個用於計算所有結果,另一個用於獲取當前頁面的資料。 然而,這種方法可能效率低。
PostgreSQL 提供了利用視窗函數的卓越解決方案(自版本 8.4 起可用)。 COUNT(*) OVER()
函數允許在單一查詢中檢索總計數和分頁結果:
<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>
值得注意的是,這種方法雖然很優雅,但由於完整的行計數計算,可能會影響非常大的表的效能。 仔細考慮性能權衡是必要的。
為了提高大型資料集的效能,請考慮以下替代方案:
GET DIAGNOSTICS
和 pg_num_rows
等客戶端函數來擷取受影響的行數。 OFFSET
的查詢以提高效率。 這可能涉及索引策略或替代查詢結構。 以上是如何在不使用多個 SQL 查詢的情況下有效率地取得分頁查詢中的總結果計數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!