这是我的基本日期 - 时间结构:
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
所以,这行代码似乎不是非常有效。我怎么能构建表来使我的搜索更有效?
非常感谢!!
答案 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)
这会效率太低吗?