Для оптимальной производительности базы данных, условия использования на голых колонн. Не заверните их в функции. Например, если предположить dtcol является тип данных DATE, DATETIME или TIMESTAMP ...
SELECT t.dtcol
FROM mytable t
WHERE t.dtcol >= '2014-01-01'
AND t.dtcol < '2015-01-01'
Это также может быть выражено:
WHERE t.dtcol >= '2014-01-01'
AND t.dtcol < '2014-01-01' + INTERVAL 1 YEAR
Если есть индекс с dtcol
в качестве ведущего столбца, MySQL может использовать операцию сканирования диапазона индекса.
НЕ сделать это:
WHERE YEAR(t.dtcol) = 2014
Это заставит MySQL оценить функцию на каждый строку в таблице, и сравнить результат от функции к буквальным.
Вы не заметите разницы в производительности на небольших тестовых таблицах. Но вы заметите это (медленно, болезненно) на больших столах в загруженной системе.
Есть несколько существенных отличий между DATETIME и TIMESTAMP.
DATETIME поддерживает гораздо больший диапазон значений.
В настоящее время TIMESTAMP реализован как 32-разрядные «секунды с начала эпохи» в стиле Unix с диапазоном значений от «1970-01-01 00:00:01» до некоторого времени '2038-01-19'.
Что такое «лучший», зависит от ситуации и не является полезным общим вопросом, поэтому я удалил эту часть. – poolie