Задавайте вопросы, мы ответим
Вы не зашли.
Есть поле `datetime` типа DATETIME.
В запросах учавствуют ещё несколько полей:
WHERE `field1` AND DATE(`datetime`)
WHERE `field1` AND DATE(`datetime`) AND `field2`
Можно было бы использовать индекс (`field1`,`field2`,`datetime`), если бы не поле `field2`, которое учавствует не во всех запросах. В середину индекса DATETIME ставить смысла нет. По префиксу DATETIME индекс создавать тоже вроде нельзя.
Вопрос: как создать индекс по этим полям, чтобы он учитывал имено дату, но не время? Пока в голове только один вариант - разбить DATETIME на DATE и TIME.
Неактивен
Насколько я понимаю, WHERE DATE (field) никогда не будет использовать индекс, как бы Вы не
старались. Соответственно, не важно, куда его поместить.
В случае, когда у Вас поле datetime - индекс на (field1, field2) - это максимум, который Вы можете
сделать. Разбивка поля, возможно, поможет частично, все зависит от количества вытягиваемых
записей.
Кстати, если использовать не DATE(dt) = ..., а dt BETWEEN .. AND .., то индекс будет использоваться,
но как последний, разумеется. Т.е. Тогда, возможно, Вас спасут два индекса (f1, dt) + (f1, f2, dt).
Неактивен