Помогите оптимизировать mysql запрос

12
FD
На сайте с 12.05.2017
Offline
71
531

Всем привет! Очень сильно нагружается процессор и достаточно медленно выполняется запрос:

Обе таблицы достаточно большие: особенно TaskFlow, как можно решить вопрос?

 $sql = "

SELECT
task.id,
task.cost,
task.provider,
task.last_start_dt
FROM Task task
LEFT JOIN TaskFlow flow ON flow.url_id=task.url_id AND flow.user_id = %i
WHERE task.status = 'active'
";
if ($tip) {
$sql .= "AND task.type = %s";
}
$sql .= " AND task.last_start_dt < '" . date('Y-m-d H:i:s', strtotime('-' . $this->insta_start_delay . ' second', time())) . "'";
$sql .= " AND flow.dt_accepted IS NULL";

$tasks_all = DB::query($sql, $this->user->id_get(), $tip);
if (!$tasks_all) {
return false;
}
НАКРУТКА INSTAGRAM (https://instagram777.ru) - Смешные цены!
LEOnidUKG
На сайте с 25.11.2006
Offline
1733
#1

Как минимум разбить на два запроса и проверить все ли индексы стоят.

JOIN больших таблиц это ещё то удовольствие.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
S
На сайте с 30.09.2016
Offline
469
#2
FrancisDarroze:
AND flow.user_id = %i

Убери это из JOIN и вставь в WHERE.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
L
На сайте с 10.02.2015
Online
225
#3

Получите текст запроса и выполните его EXPLAIN

FD
На сайте с 12.05.2017
Offline
71
#4
Sitealert:
Убери это из JOIN и вставь в WHERE.

Ни на что не повлияло

S
На сайте с 30.09.2016
Offline
469
#5
FrancisDarroze:
Ни на что не повлияло

Зато стало по феншую. А в самом запросе больше нечего оптимизировать, только сделать то, что выше предложили.

ArbNet
На сайте с 27.10.2019
Offline
126
#6

А мне интересно стало "DB::query" у вас объект базы данных присвоен PHP константе? по типу: define('DB',DataBase::Instance());

Обсуждение разработки на моём фреймворке https://discord.gg/23N4s9x2kp
S
На сайте с 30.09.2016
Offline
469
#7

ArbNet, удали то, что написал, пока никто не увидел. ;)

Aisamiery
На сайте с 12.04.2015
Offline
295
#8
ArbNet:
А мне интересно стало "DB::query" у вас объект базы данных присвоен PHP константе? по типу: define('DB',DataBase::Instance());

Ну как так то? Ну блин?

Я так надеялся что вы хотя бы смогли освоить php более менее, фиг с ним что не хватило мозгов на освоение готовых либ, но язык то язык?

PS Это статический метод класса. Какой же у вас уровень интересно?

PPS. Константами могут быть только скалярные типы и массив (с 5.6)

PPPS Обратил внимание, что точно то же самое вызвали в объявлении константы... даже не знаю что думать

Разработка проектов на Symfony, Laravel, 1C-Bitrix, UMI.CMS, OctoberCMS
ArbNet
На сайте с 27.10.2019
Offline
126
#9
Aisamiery:
Это статический метод класса

Если бы был знак $ перед $DB::query вопросов нет

::query - да, статичный метод

К статичному методу класса обращаются через self::$query или извне $DB::$query

А вот это "DB::query" мне не понятно стало

Извиняюсь, конечно, последнее время писал только на JS, PHP подзабывать стал

S
На сайте с 30.09.2016
Offline
469
#10
ArbNet:
Если бы был знак $ перед $DB::query вопросов нет

А не наоборот? 😂

И тогда как понимать это?

ArbNet:
DataBase::Instance());
Я же посоветовал удалить эту ахинею, почему не послушал совета? А дальше ещё усугубил.

Ну да, в хренворках пхп не нужен, там же всё в машинных кодах написано. 😮

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий