2013-07-26 27 views
3

我有表包含兩個字段「名稱」和「日期」的300萬條記錄。現在 我需要計算上個月的紀錄,所以我做如何優化大表上的計數查詢

select count(*) from lenders_transaction WHERE dates >= now()-interval 1 month; 

但它是需要長時間,所以我需要建議如何優化計數的查詢,以及如何獲得快速的結果。

+6

你有'日期'字段的索引嗎? – valex

+0

檢查EXPLAIN輸出以查看發生了什麼 – Randy

+0

日期字段中沒有索引。如果我添加它會使查詢速度快? –

回答

4

@Valex有正確的解決方案,它是date字段上的索引。

我想評論一下,一張擁有3億行和越來越多的表是一張大桌子。該查詢表明最近的數據比舊數據更重要。如果是這樣,你應該瞭解分區。

分區是將大型表拆分爲更小的存儲單元的一種方法。如果一個查詢只需要訪問其中的一個,那麼只會讀取這些數據進行處理 - 這是很大的節省。例如,如果您的數據按月分區,並且您有36個月的數據,那麼您的查詢只需訪問2個月的值。這比讀取所有數據節省近95%。

Here是關於分區的MySQL文檔。