@4sadly

Что сработает быстрее, что лучше использовать?

Всем привет, такой вопрос, что сработает быстрее?
whereDate('created_at', Carbon::today())
или
whereBetween('created_at', [Carbon::now()->startOfDay(), Carbon::now()->endOfDay()])

я так понимаю в бд хранится timestamp - int число

и чисто логически будет быстрее >< чем округление микросекунд до 86400 секунд (1день) и выражения ==

Я так понимаю, если я очень часто выбираю записи по их created_at, то лучше закинуть индекс на этот столбик и второй вариант будет в разы предпочтительнее?
  • Вопрос задан
  • 924 просмотра
Решения вопроса 1
ipatiev
@ipatiev
Потомок старинного рода Ипатьевых-Колотитьевых
Хороший вопрос, хотя и задавался миллион раз.

Когда у вас выполняется запрос
SELECT * FROM users WHERE DATE(created_at) = '2024-04-14'
то СУБД должна пройти весь индекс до конца, получить каждое значение created_at, применить к нему функцию, сравнить с переданным значением, и добавить строку в результат запроса.

Когда у вас выполняется запрос
SELECT * FROM users WHERE created_at BETWEEN '2024-04-14 00:00:00' AND '2024-04-14 23:59:59'

То СУБД находит бинарным поиском первое нужное значение, потом бежит по заранее отсортированному индексу и возвращает все значения до последнего, подходящего под второе условие.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы