如何在Mysql中优化日期时间搜索?

时间:2010-11-20 14:06:17

标签: mysql datetime search

这是我的基本日期 - 时间结构:

primary  key(datetime)         key
auot_id  date_time             user_id
1        2010-10-01 20:32:34    1
2        2010-10-02 20:32:34    1
3        2010-11-03 20:32:34    2
4        2010-10-04 20:32:34    1
5        2010-11-05 20:32:34    1

我想在day(date_time)'2010-10'获得user_id = '1';的结果 我的SQL是:

SELECT * FROM datetime WHERE user_id = 1 AND DATE_FORMAT(date,'%Y-%m') = '2010-10'

EXPLAIN代码显示:

SIMPLE datetime ALL (NULL) (NULL) (NULL) (NULL) 5 Using where

所以,这行代码似乎不是非常有效。我怎么能构建表来使我的搜索更有效?

非常感谢!!

3 个答案:

答案 0 :(得分:12)

在WHERE子句中的列上使用函数可防止在该列上有效使用索引。试试这个:

SELECT *
FROM `datetime`
WHERE user_id = 1
AND `date` >= '2010-10-01' AND `date` < '2010-11-01'

(user_id, date)上添加索引。

答案 1 :(得分:2)

SELECT *
FROM yourTable
WHERE datatime
BETWEEN '2010-10-01' AND '2010-11-01'

效率高,也接受索引。

答案 2 :(得分:0)

怎么样:

WHERE CAST(datatime AS DATE) = '2010-10-01'

或者

WHERE CAST(datatime AS DATE) = CAST('2010-10-01' AS DATE)

这会效率太低吗?