Был SO вопрос Даты совпадения ошибок в PDO , на который я дал ответ и немного поговорил.
По сути, я сказал, что не используйте подстановочные знаки в датах:
SELECT * FROM table where datefiled LIKE '%2018-06%'
И вместо этого используйте что-то вроде (да, между ними тоже будет работать):
SELECT * FROM table where MONTH(datefield) = '06' and YEAR(datefield) = '2018
Это привело к комментарию к моему ответу, в котором говорилось, что ему сказали (данные с +90 миллионами строк):
Когда вы применяете функцию к столбцу, это аннулирует использование индекса для поиска, так как она должна была бы применить ту же функцию ко ВСЕМ значениям в индексе и, следовательно, была бы менее эффективной даже. Отсюда необходимость использовать трюк с границами дат.
Мое понимание алгоритмов поиска, которые реализует SQL, не так уж велико, но я понимаю, когда использовать, а не использовать индекс (чтение против записи). Вышеприведенное, по-видимому, подразумевает, что использование функций MONTH()
и YEAR()
будет менее эффективным, чем строка LIKE
. Если бы комментарий был о BETWEEN
, я бы получил его, но я не могу представить вариант использования, когда LIKE
выиграет из-за вызова функции.
Если это возможно, что это за вариант использования?