2011-04-27 76 views
0

爲什麼在我切換到1年範圍時MySQL會搜索所有行?日期索引 - 長範圍搜索所有行,小不

--Table dates 
id (int) 
date (timestamp) 
value (varchar) 

PRIMARY(id), date_index(date) 

1750行

執行
EXPLAIN SELECT * FROM dates WHERE date BETWEEN '2011-04-27' AND '2011-04-28'

柱顯示18行
如果我增加或減少BETWEEN範圍 - 例如1年 - 列顯示1750行

EXPLAIN SELECT * FROM dates WHERE date BETWEEN '2011-04-27' AND '2012-04-28' EXPLAIN SELECT * FROM dates WHERE date BETWEEN '2010-04-27' AND '2011-04-28'

回答

1

優化構建取決於幾件事情包括的數據量/分配的查詢計劃。我最好的猜測是,你的數據不會超過一年,或者使用索引來計算一年的數據不會比使用總表的大小少得多。

如果沒有健全的權利,你可以張貼的輸出:

SELECT MIN(date), MAX(date) FROM dates; 
SELECT COUNT(*) FROM dates WHERE date BETWEEN '2011-04-27' AND '2012-04-28'; 

這篇文章我寫了顯示優化器是如何工作過的一些例子:What makes a good MySQL index? Part 2: Cardinality

+0

檢查的文章... – cmancre 2011-04-27 11:33:05

+0

這是「爲什麼MySQL不使用我的索引?」與最相關的部分 – 2011-04-27 11:38:10

+0

好的文章。當然,我必須在這個主題上挖掘更多。這件事並非微不足道。謝謝詹姆斯 – cmancre 2011-04-27 11:50:30