这是我的基本日期-时间结构:
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
我想在'2010-10'
上得到day(date_time)
的结果,我的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
因此,这行代码似乎不是很有效。如何构建表以使搜索更有效??
非常感谢!
发布于 2010-11-20 22:08:44
在WHERE子句中对列使用函数可防止有效地使用该列上的索引。试着这样做:
SELECT *
FROM `datetime`
WHERE user_id = 1
AND `date` >= '2010-10-01' AND `date` < '2010-11-01'
在(user_id, date)
上添加索引。
发布于 2011-11-10 11:26:56
SELECT *
FROM yourTable
WHERE datatime
BETWEEN '2010-10-01' AND '2010-11-01'
效率高,也接受索引。
发布于 2012-02-09 06:50:45
这样如何:
WHERE CAST(datatime AS DATE) = '2010-10-01'
或者也许
WHERE CAST(datatime AS DATE) = CAST('2010-10-01' AS DATE)
这是不是太低效了?
https://stackoverflow.com/questions/4233095
复制相似问题