2012-01-30 34 views
2

例如,如果我必須計算屬於文章的評論,很明顯,我不需要緩存評論總數。什麼時候應該考慮將總數保存在一個字段中?

但是,如果我想爲包含100萬張照片的圖庫(WHERE狀態= 1)分頁,該怎麼辦。我應該保存在一個稱爲計數或SELECT計數(ID)的表中,因爲每次總計都很好嗎?

還有其他解決方案嗎?

請指教。謝謝。

回答

4

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

例如,

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

從手冊:

在某些情況下,希望知道有多少行語句 本來沒有限制返回,但沒有運行 再次聲明。要獲得此行計數,請在SELECT語句中包含 SQL_CALC_FOUND_ROWS選項,然後在後面調用FOUND_ROWS() 。

樣本用法here

+0

@oaziz看到我的編輯上面 – RedFilter 2012-01-30 14:07:19

1

每次做點數都可以。

在尋呼,您可以使用SQL_CALC_FOUND_ROWS反正

注:

  1. 一個denormalied數將變得陳舊
  2. 沒有人會頁面這麼多項目
2

這取決於一個對於在該表上完成的具有100萬條記錄的查詢的數量位。考慮只考慮好索引,尤其是多列索引(因爲它們很容易被忘記:here.這會做很多事情,並且確保查詢在您的服務器上也能緩存)

如果你使用這個列非常規則,考慮保存它(如果它不能被MySQL緩存),因爲事情可能會變得緩慢,但大多數時候好的索引會照顧它。如果查詢仍然很快,並且在連續執行多次時性能不下降。

EXPLAIN [QUERY] 

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

相關問題