我有一個約1000萬個條目的數據庫,每個條目都包含一個存儲爲DATE的日期。在mysql中快速搜索不同的日期部分
我已經使用非唯一的BTREE索引了該列。
我運行登載項的每個不同的年份數的查詢:
SELECT DISTINCT(YEAR(awesome_date)) as year, COUNT(id) as count
FROM all_entries
WHERE awesome_date IS NOT NULL
GROUP BY YEAR(awesome_date)
ORDER BY year DESC;
查詢需要大約90秒,在目前運行,並且EXPLAIN輸出證明了爲什麼:
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
----------------------------------------------------------------------------------------------------------------------------------------
1 | SIMPLE | all_entries | ALL | awesome_date | | | | 9759848 | Using where; Using temporary; Using filesort
如果我將FORCE KEY(awesome_date)
下降的行數減少到〜800萬,並且key_len = 4
,但仍然是Using where; Using temporary; Using filesort
。
我也運行查詢選擇DISTINCT(MONTH(awesome_date))
和DISTINCT(DAY(awesome_date))
與相關的WHERE
條件限制他們到一個特定的年份或月份。
除了將年份,月份和日期信息存儲在單獨的列中,是否有加快此查詢和/或避免臨時表和文件夾的方法?
@Jon:有幫助嗎? – 2012-04-24 15:15:19