我有一个带有datetime
列的表,该列已编入索引。我想为特定日期选择所有行。以前我一直在用这个:
SELECT *
FROM `table`
WHERE DATE(date_column) = '2016-04-12';
这很好用,但是我注意到性能问题,因为MySQL在应用DATE()
函数后没有使用索引。我也试过了:
SELECT *
FROM `table`
WHERE SUBSTR(date_column,1,10) = '2016-04-12';
无济于事。到目前为止,似乎唯一有用的是:
SELECT *
FROM `table`
WHERE date_column >= '2016-04-12'
AND date_column < '2016-04-13'
最后一个查询成功使用了索引,但我想知道是否有办法只用一个条件来执行此操作。
答案 0 :(得分:1)
我喜欢这种代码模式;它清晰,准确(午夜没有混淆),可以使用索引:
WHERE date_column >= '2016-04-12'
AND date_column < '2016-04-12' + INTERVAL 1 DAY
它甚至正常工作&#39;适用于DATE
,DATETIME
,TIMESTAMP
,DATETIME(6)
等。
'2016-04-12 00:00:00.000'
与'2016-04-12'
相同。我更喜欢后者,因为它更简洁。