选择datetime = date的行,仍然使用index

时间:2016-04-14 18:21:39

标签: mysql indexing

我有一个带有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'

最后一个查询成功使用了索引,但我想知道是否有办法只用一个条件来执行此操作。

1 个答案:

答案 0 :(得分:1)

我喜欢这种代码模式;它清晰,准确(午夜没有混淆),可以使用索引:

WHERE date_column >= '2016-04-12'
  AND date_column  < '2016-04-12' + INTERVAL 1 DAY

它甚至正常工作&#39;适用于DATEDATETIMETIMESTAMPDATETIME(6)等。

在此上下文中使用时,

'2016-04-12 00:00:00.000''2016-04-12'相同。我更喜欢后者,因为它更简洁。