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

12
FD
На сайте с 12.05.2017
Offline
59
510

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

Обе таблицы достаточно большие: особенно 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
1554
#1

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

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

✅ Трастовых площадок под размещение статей и ссылок. Опыт 12 лет! ( https://searchengines.guru/ru/forum/675690 ) ⭐ Купить вечные трастовые ссылки для сайта ( https://getmanylinks.ru/?srh ) ⭐ Ускорение ваших сайтов (WP, Opencart и др.) + Настройка сервера ( https://searchengines.guru/ru/forum/997205 )
S
На сайте с 30.09.2016
Offline
459
#2
FrancisDarroze:
AND flow.user_id = %i

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

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

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

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

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

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

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

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

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

Блажен, кто не стремится сделать лучше: он не рискует быть не понятым.
S
На сайте с 30.09.2016
Offline
459
#7

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

Aisamiery
На сайте с 12.04.2015
Offline
206
#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
52
#9
Aisamiery:
Это статический метод класса

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

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

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

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

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

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

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

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

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

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

12

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