LEFT против DATE_FORMAT в mysql

LEFT или DATE_FORMAT, что быстрее переформатирует дату в запросе SELECT в mysql?
Я покажу пример этой проблемы.

Информация таблицы PERSON

Имя столбца Тип ИМЯ ВАРЧАР(20) ГОД ДАТАВРЕМЯ

ЧЕЛОВЕК

ИМЯ ГОД Трэвис 2020-01-01 Сэм 2021-01-01

Если выполнить запрос «ВЫБЕРИТЕ ГОД ОТ ЧЕЛОВЕКА», вы увидите результат ниже.

ГОД 2020-01-01 00:00:00 2021-01-01 00:00:00

Но я хочу результат, как показано ниже.

ГОД 2020-01-01 2021-01-01

Итак, я хотел использовать один из следующих запросов.

  • ВЫБЕРИТЕ СЛЕВА(ГОД,10) ОТ ЧЕЛОВЕКА

  • ВЫБЕРИТЕ DATE_FORMAT (ГОД, '%Y-%m-%d')

Однако мне интересно, какой запрос работает лучше.
Пожалуйста, помогите мне..

🤔 А знаете ли вы, что...
MySQL обеспечивает множество индексов для оптимизации поисковых запросов.


68
1

Ответ:

Решено

Технически LEFT() работает почти в четыре раза быстрее, основываясь на этом тесте на моем Macbook M1. Ваш результат может отличаться.

mysql> select benchmark(100000000, left(year, 10)) from person;
+--------------------------------------+
| benchmark(100000000, left(year, 10)) |
+--------------------------------------+
|                                    0 |
+--------------------------------------+
1 row in set (1.75 sec)

mysql> select benchmark(100000000, date_format(year, '%Y-%m-%d')) from person;
+-----------------------------------------------------+
| benchmark(100000000, date_format(year, '%Y-%m-%d')) |
+-----------------------------------------------------+
|                                                   0 |
+-----------------------------------------------------+
1 row in set (6.81 sec)

Но учитывая, что мне пришлось выполнить оба выражения 100 миллионов раз, чтобы увидеть существенную разницу, оба они настолько быстры, что я бы не стал об этом беспокоиться. Вполне вероятно, что другие части запроса окажут гораздо большее влияние на производительность.

Беспокоиться о том, какая из этих двух функций работает лучше, все равно что беспокоиться о том, что лучше использовать для подъема 100-килограммовой штанги одним или двумя пальцами.