2015-02-24 73 views
0

請原諒我對這個問題的無知,因爲我在這方面沒有多少經驗。我有一個頁面使用mysql COUNT(*)查詢來返回用戶的統計信息。例如,像:改進或消除mysql的方法COUNT

SELECT COUNT(*) FROM worker WHERE worker_id = '1234'; 

它採用指數worker_id並檢查了EXPLAIN似乎查詢看起來不錯。但是,這種方式的執行非常殘忍,並且對於具有一百萬行的表的單個查詢可能需要5秒以上的時間。此外,這是一個相當常見的查詢,有時會導致多個查詢嘗試運行此操作時發生mysql超時錯誤。

什麼是解決這個問題的好方法?信息變化很快,所以我不認爲緩存會起作用。我會如何解決這個問題,以及一些大型網站做什麼顯示統計(例如,Facebook的朋友或Twitter的追隨者)?

+0

是否爲worker.worker_id建立索引? – 2015-02-24 20:37:45

+0

@DanBracuk是的。 – Hockey127 2015-02-24 21:06:41

回答

2

首先,請確保您有worker(worker_id)的索引。

其次,如果列是一個真正的數量,而不是一個字符串,那麼就不要使用單引號:

SELECT COUNT(*) 
FROM worker 
WHERE worker_id = 1234; 

第三,如果你只需要知道,如果工人存在(以及不實際上需要計數),然後運行如下查詢:

select 1 
from worker 
where worker_id = 1234 
limit 1; 

並檢查是否有任何行被返回。

+0

感謝您的解釋。假設以上所有內容都已完成,並且仍然非常緩慢。那麼我的選擇會是什麼呢? – Hockey127 2015-02-24 21:04:47

+0

使其成爲傳遞參數並將數據庫放置在功能更強大的計算機上的存儲過程。 – 2015-02-24 22:17:06