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

如何在Mysql中优化日期时间搜索?,mysql,datetime,search,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:

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

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'
得到
天(日期时间)
的结果,
用户id='1'
我的SQL是:

SELECT * FROM datetime WHERE user_id = 1 AND DATE_FORMAT(date,'%Y-%m') = '2010-10'
但是
解释
代码显示:

SIMPLE datetime ALL (NULL) (NULL) (NULL) (NULL) 5 Using where
所以,这行代码似乎不是很有效。我如何构造表以使搜索更有效


非常感谢

在WHERE子句中的列上使用函数会妨碍高效使用该列上的索引。请尝试以下方法:

SELECT *
FROM `datetime`
WHERE user_id = 1
AND `date` >= '2010-10-01' AND `date` < '2010-11-01'
选择*
从`日期时间`
其中user_id=1
和'date`>='2010-10-01'和'date`<'2010-11-01'
(用户id,日期)
上添加索引

高效且可接受索引。

如何:

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

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

这会不会太低效?

我是mysql新手。所以我不确定我应该添加什么样的索引?我想我已经对它们进行了索引:索引
date
date
user\u id
)你想要它,因为
user\u id
是一个“静态”值,当
date
传递给函数时。请参见用户在何处更好地解释如何覆盖所有日期和时间段,如果您担心午夜事务函数或日期/日期时间列上的强制转换会影响性能,并使该列上的索引为空(如果您添加了索引,以提高性能),这与日期(datatime)相同,这实际上使索引无效
WHERE CAST(datatime AS DATE) = CAST('2010-10-01' AS DATE)