guvijur
@guvijur
Практик, кинестетик, ретроград и консерватор

Как ускорить (оптимизировать) SQL-запрос с временным интервалом?

Всем привет!

Помогите с советом или решением?
На портале в определённом месте выполняется AJAX-запрос. PHP-файл, к которому идёт обращение, обращается к базе данных MySQL. Всё работает корректно, но есть вопрос к производительности.
Изначально SQL-запрос выглядел так:
$getTaskSql = "SELECT COUNT(*) AS `t_id` FROM `tasks` WHERE `ispol`='" . $row['id'] . "' AND `status` !=3 && `status` !=6";

Считается количество строк в таблице tasks для конкретного пользователя.
Недавно потребовалось считать количество строк за некоторый интервал от текущей даты.
Строка приобрела вид:
$getTaskSql = "SELECT COUNT(*) AS `t_id` FROM `tasks` WHERE `ispol`='" . $row['id'] . "' AND `status` !=3 && `status` !=6 AND `daten` > (date_ADD(now(), interval -62 DAY ))";

Т.е., всё то же самое, но за прошедшие 62 дня.
Но обнаружился неприятный нюанс - увеличилось время обработки AJAX-запроса. Если раньше данные в полях заполнялись за 1 - 2 секунды, то теперь стало от 2 до 6 секунд.

Стоит убрать из строки запроса AND `daten` > (date_ADD(now(), interval -62 DAY )), как опять всё укладывается в 1 - 2 секунды.

Я не являюсь самым крутым специалистом в SQL, поэтому прошу помощи у Вас.

Если есть идеи, как можно написать запрос по другому, оптимизировать его, то подскажите.

Спасибо.
  • Вопрос задан
  • 134 просмотра
Решения вопроса 1
Mikhail_E
@Mikhail_E
1С, SQL
1. Нужен индекс по полю "daten"
2. Избавится от расчета даты в запросе, и передавать в запрос конкретную дату, рассчитанную перед запросом.
UPD: 2-й пункт особого прироста не даст, из-за расчета справа от сравнения.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы