簡體   English   中英

我什么時候應該考慮將總數保存在字段中?

[英]When should I consider saving the total count in a field?

例如,如果我必須計算屬於某條文章的評論,那么很明顯我不需要緩存全部評論。

但是,如果我想對包含100萬張照片的畫廊(狀態為1)進行分頁怎么辦? 我應該將其保存在稱為counts或SELECT count(id)的表中,因為每次都可以總計嗎?

還有其他解決方案嗎?

請指教。 謝謝。

對於MySQL,不需要存儲計數,可以使用SQL_CALC_FOUND_ROWS避免兩個查詢。

例如,

SELECT SQL_CALC_FOUND_ROWS * 
FROM Gallery
WHERE status = 1
LIMIT 10;
SELECT FOUND_ROWS();

從手冊:

在某些情況下,需要知道語句在沒有LIMIT的情況下返回了多少行,但是沒有再次運行語句。 若要獲得此行計數,請在SELECT語句中包含SQL_CALC_FOUND_ROWS選項,然后再調用FOUND_ROWS()。

示例用法在這里

它多少取決於在具有100萬條記錄的表上執行的查詢量。 考慮只照顧好索引,尤其是多列索引(因為它們很容易被遺忘: 這里。這樣做會做很多事情。而且,請確保查詢也很好地緩存在您的服務器上。

如果您經常使用此列,請考慮保存它(如果它不能被MySQL緩存),因為事情可能會變慢。 但是在大多數情況下,良好的索引會解決這一問題。

最佳嘗試:設置一些測試,以查明在連續執行多次查詢后,查詢是否仍然可以快速執行並且性能沒有下降。

EXPLAIN [QUERY] 

使用該命令(在MySQL中)獲取有關執行查詢的方式以及是否可以改進查詢的信息。

每次都做計數就可以了。

分頁期間,您仍然可以使用SQL_CALC_FOUND_ROWS

注意:

  1. 非正常計數將變得過時
  2. 沒有人會分頁這么多項目

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM