」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何從 MySQL 有效率地檢索總計數和分頁結果?

如何從 MySQL 有效率地檢索總計數和分頁結果?

發佈於2024-12-21
瀏覽:878

How Can I Efficiently Retrieve Both Total Count and Paginated Results from MySQL?

MySQL 分頁:高效檢索結果和總計數

在MySQL 中實現分頁時,通常的做法是執行兩個單獨的查詢:一到取得結果總數,另一個限制取得的記錄。這種稱為雙重查詢的方法對於大型資料集可能效率低。

然而,問題是是否可以在單一查詢中檢索總結果計數並限制結果。雖然沒有直接的方法來實現此目的,但有兩種替代方法可用:

SQL_CALC_FOUND_ROWS 和FOUND_ROWS()

SQL_CALC_FOUND_ROWS 和FOUND_ROWS()

您可以使用SQL_CALC_FOUND_ROWS 而不是雙重查詢和FOUND_ROWS() 函數可以實現類似的結果。使用 SQL_CALC_FOUND_ROWS 的查詢在限制查詢之前,而 FOUND_ROWS() 呼叫會取得總計數。

SELECT SQL_CALC_FOUND_ROWS * FROM `table` WHERE `some_condition`;
SELECT FOUND_ROWS();

SELECT SQL_CALC_FOUND_ROWS * FROM `table` WHERE `some_condition `; SELECT FOUND_ROWS();

注意: 此方法有一個潛在的缺點。 MySQL 有一個錯誤,在使用此技術時會影響 ORDER BY 查詢,使其在大型表上速度變慢。

快取計數

另一個解決方案是快取總計數在特定的持續時間內。這種方法無需單獨查詢來獲取計數,同時保持效率。

範例:

SET @count = (SELECT COUNT(*) FROM `table` WHERE `some_condition`);
擷取計數並將其快取10 分鐘:

SET @count = (SELECT COUNT(*) FROM `table` WHERE `some_condition`);
SET @count = (SELECT COUNT(*) FROM `table` WHERE `some_condition`);
後續查詢時,請使用快取的計數:

SELECT * FROM `table` WHERE `some_condition` LIMIT 0, 10;

How Can I Efficiently Retrieve Both Total Count and Paginated Results from MySQL?
快取計數可顯著提高效能,特別是對於經常造訪的頁面。雖然它不是單查詢解決方案,但它實現了相同的結果,同時比雙查詢更有效率。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3