3
我有表包含兩個字段「名稱」和「日期」的300萬條記錄。現在 我需要計算上個月的紀錄,所以我做如何優化大表上的計數查詢
select count(*) from lenders_transaction WHERE dates >= now()-interval 1 month;
但它是需要長時間,所以我需要建議如何優化計數的查詢,以及如何獲得快速的結果。
我有表包含兩個字段「名稱」和「日期」的300萬條記錄。現在 我需要計算上個月的紀錄,所以我做如何優化大表上的計數查詢
select count(*) from lenders_transaction WHERE dates >= now()-interval 1 month;
但它是需要長時間,所以我需要建議如何優化計數的查詢,以及如何獲得快速的結果。
@Valex有正確的解決方案,它是date
字段上的索引。
我想評論一下,一張擁有3億行和越來越多的表是一張大桌子。該查詢表明最近的數據比舊數據更重要。如果是這樣,你應該瞭解分區。
分區是將大型表拆分爲更小的存儲單元的一種方法。如果一個查詢只需要訪問其中的一個,那麼只會讀取這些數據進行處理 - 這是很大的節省。例如,如果您的數據按月分區,並且您有36個月的數據,那麼您的查詢只需訪問2個月的值。這比讀取所有數據節省近95%。
Here是關於分區的MySQL文檔。
你有'日期'字段的索引嗎? – valex
檢查EXPLAIN輸出以查看發生了什麼 – Randy
日期字段中沒有索引。如果我添加它會使查詢速度快? –