MySQL Функция РАЗНДЛИН VS сравнить ИНТЕРВАЛЬНЫЙ ДЕНЬ - PullRequest
0 голосов
/ 06 августа 2020

В чем разница между функцией РАЗНДАТ и прямым вычитанием ИНТЕРВАЛ ДЕНЬ?

  1. SELECT * FROM table WHERE DATEDIFF(CURDATE(), publish_date) <= 3

  2. SELECT * FROM table WHERE publish_date >= CURDATE() - INTERVAL 3 DAY

Результаты совпадают, но кажется 2. способ немного быстрее?

1 Ответ

3 голосов
/ 06 августа 2020

Первое выражение, которое использует DATEDIFF(), требует применения функции даты к каждой строке до может произойти фильтрация.

Напротив, второе выражение не подразумевает такой предварительная обработка: CURDATE() - INTERVAL 3 DAY вычисляется только один раз, а затем напрямую сравнивается со значением publish_date. Этот предикат может использовать индекс в столбце даты. Это правильный способ сделать это.

С технической точки зрения мы говорим, что второй предикат - sargable , а первый - нет: это означает Search ARGument ABLE

Практическое правило: не применяйте функции к столбцу, который вы фильтруете, если у вас есть способ обойти.

...