Я не знаю о специфике mySQL, но какой вред в том, чтобы индексировать поле даты целиком?
Если вы используете функциональную магию для * деревьев, хэши ... исчезли, потому что для получения значений вы должны вызвать функцию. Но, поскольку вы не знаете ожидаемых результатов, вам необходимо выполнить полное сканирование таблицы.
Добавить нечего.
Может быть, вы имеете в виду что-то вроде вычисляемых (вычисляемых?) Индексов ... но на сегодняшний день я видел это только в Intersystems Caché. Я не думаю, что есть случай в реляционных базах данных (AFAIK).
Хорошим решением, на мой взгляд, является следующее (обновленный пример clintp):
SELECT * FROM translist
WHERE TranDateTime >= '2008-08-17 00:00:00.0000'
AND TranDateTime < '2008-08-18 00:00:00.0000'
На мой взгляд, не имеет значения, используете ли вы 00:00:00.0000
или 00:00
(я обычно использовал его в этом формате).