При добавлении строки:
LEFT JOIN core_records_sales as sales ON DATE(appointments.date) = DATE(sales.date_sold)
По моему запросу, это увеличивает время запуска скрипта от 8 секунд до 2-3 минут.
Будут ли какие-то данные, вызывающие эту проблему, или я неправильно реализую эту функцию?
Мне нужно использовать DATE (), потому что мне нужно, чтобы они были в тот же день, но поля даты DATETIME
Это почти наверняка проблема с индексом поля assignments.date. Добавление использования функции DATE () делает так, чтобы индекс не мог использоваться, заставляя сканирование таблицы.
Мне приходилось иметь дело с этим раньше, и лучшим способом, который я нашел для решения проблемы, является наличие отдельного столбца с указанием только части даты (времени) или сохранения даты и времени в двух отдельных столбцах ,
Мне бы хотелось услышать, есть ли у других лучший способ справиться с этим.
У вас есть индекс в столбце даты? Присоединение без индекса требует полного сканирования таблицы, поэтому, вероятно, причиной проблемы с производительностью.
Запустите запрос через EXPLAIN, чтобы узнать, что оптимизатор запросов подходит для плана запроса.
Вероятно, это связано с тем, что вы принудительно выполняете полное сканирование таблицы на обеих таблицах, тогда как ранее вы использовали индекс как часть запроса. Вам нужно изучить план (и предоставить нам еще немного подробностей), чтобы запустить его через EXPLAIN, чтобы узнать, что происходит.