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;
快取計數可顯著提高效能,特別是對於經常造訪的頁面。雖然它不是單查詢解決方案,但它實現了相同的結果,同時比雙查詢更有效率。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3