Веб-строительствоПомогите оптимизировать mysql запрос 23.05.2021 FrancisDarroze 22 мая 2020, 08:16 516Всем привет! Очень сильно нагружается процессор и достаточно медленно выполняется запрос:Обе таблицы достаточно большие: особенно 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; } LEOnidUKG 22 мая 2020, 08:31Как минимум разбить на два запроса и проверить все ли индексы стоят.JOIN больших таблиц это ещё то удовольствие. Sitealert 22 мая 2020, 09:02FrancisDarroze:AND flow.user_id = %iУбери это из JOIN и вставь в WHERE. livetv 22 мая 2020, 09:24Получите текст запроса и выполните его EXPLAIN FrancisDarroze 22 мая 2020, 10:56Sitealert:Убери это из JOIN и вставь в WHERE.Ни на что не повлияло Sitealert 22 мая 2020, 10:58FrancisDarroze:Ни на что не повлиялоЗато стало по феншую. А в самом запросе больше нечего оптимизировать, только сделать то, что выше предложили. ArbNet 22 мая 2020, 11:36А мне интересно стало «DB::query» у вас объект базы данных присвоен PHP константе? по типу: define(‘DB’,DataBase::Instance()); Sitealert 22 мая 2020, 11:55ArbNet, удали то, что написал, пока никто не увидел. 😉 Aisamiery 22 мая 2020, 12:20ArbNet:А мне интересно стало «DB::query» у вас объект базы данных присвоен PHP константе? по типу: define(‘DB’,DataBase::Instance());Ну как так то? Ну блин?Я так надеялся что вы хотя бы смогли освоить php более менее, фиг с ним что не хватило мозгов на освоение готовых либ, но язык то язык?PS Это статический метод класса. Какой же у вас уровень интересно?PPS. Константами могут быть только скалярные типы и массив (с 5.6)PPPS Обратил внимание, что точно то же самое вызвали в объявлении константы… даже не знаю что думать ArbNet 22 мая 2020, 12:43Aisamiery:Это статический метод классаЕсли бы был знак $ перед $DB::query вопросов нет::query — да, статичный методК статичному методу класса обращаются через self::$query или извне $DB::$queryА вот это «DB::query» мне не понятно сталоИзвиняюсь, конечно, последнее время писал только на JS, PHP подзабывать стал Sitealert 22 мая 2020, 12:47ArbNet:Если бы был знак $ перед $DB::query вопросов нетА не наоборот? 😂И тогда как понимать это?ArbNet:DataBase::Instance());Я же посоветовал удалить эту ахинею, почему не послушал совета? А дальше ещё усугубил.Ну да, в хренворках пхп не нужен, там же всё в машинных кодах написано. 😮 Похожие записи:Рефакторинг функций динамического фильтраТонкая оболочка C ++ для библиотеки sqlite3 CДобавление итераторов в класс оболочки C ++ sqliteМногие программы не устанавливаются, а установленные не открываютсяНарушается ли шаблон репозитория при использовании IQueryable вне его?
FrancisDarroze
Всем привет! Очень сильно нагружается процессор и достаточно медленно выполняется запрос:
Обе таблицы достаточно большие: особенно TaskFlow, как можно решить вопрос?
LEOnidUKG
Как минимум разбить на два запроса и проверить все ли индексы стоят.
JOIN больших таблиц это ещё то удовольствие.
Sitealert
Убери это из JOIN и вставь в WHERE.
livetv
Получите текст запроса и выполните его EXPLAIN
FrancisDarroze
Убери это из JOIN и вставь в WHERE.
Ни на что не повлияло
Sitealert
Ни на что не повлияло
Зато стало по феншую. А в самом запросе больше нечего оптимизировать, только сделать то, что выше предложили.
ArbNet
А мне интересно стало «DB::query» у вас объект базы данных присвоен PHP константе? по типу: define(‘DB’,DataBase::Instance());
Sitealert
ArbNet, удали то, что написал, пока никто не увидел. 😉
Aisamiery
А мне интересно стало «DB::query» у вас объект базы данных присвоен PHP константе? по типу: define(‘DB’,DataBase::Instance());
Ну как так то? Ну блин?
Я так надеялся что вы хотя бы смогли освоить php более менее, фиг с ним что не хватило мозгов на освоение готовых либ, но язык то язык?
PS Это статический метод класса. Какой же у вас уровень интересно?
PPS. Константами могут быть только скалярные типы и массив (с 5.6)
PPPS Обратил внимание, что точно то же самое вызвали в объявлении константы… даже не знаю что думать
ArbNet
Это статический метод класса
Если бы был знак $ перед $DB::query вопросов нет
::query — да, статичный метод
К статичному методу класса обращаются через self::$query или извне $DB::$query
А вот это «DB::query» мне не понятно стало
Извиняюсь, конечно, последнее время писал только на JS, PHP подзабывать стал
Sitealert
Если бы был знак $ перед $DB::query вопросов нет
А не наоборот? 😂
И тогда как понимать это?
DataBase::Instance());
Я же посоветовал удалить эту ахинею, почему не послушал совета? А дальше ещё усугубил.
Ну да, в хренворках пхп не нужен, там же всё в машинных кодах написано. 😮