Коленько Сергей

теги:

datainlife

Новости

Оптимизация запросов MYSQL

Столкнулся с необходимостью создания запроса с неколькими подряд LEFT JOIN.

INSERT INTO to_reserve_mcr (cid, to_reserve) SELECT distinct g.id, ROUND(SUM(pacr.volume_discontented), 5) FROM good AS g LEFT JOIN good_in_group as gig ON gig.good_id = g.id LEFT JOIN product_accounting_component_reserve as pacr ON pacr.component_id = g.id LEFT JOIN product_accounting_order as po ON pacr.order_id = po.id where FIND_IN_SET(gig.group_id, "125,132,160,233,136,252,134,313,162,312") AND (po.state <> "closed") GROUP BY g.id

Здесь product_accounting_order - таблица заказов.

По мере того, как база данных разрослась, запрос стал выполняться очень долго, вплоть до того, что апач обрывал соединение с браузером раньше, чем выполнялся запрос.

Долго пытался оптимизировать запрос, и заметил, что на самом деле, хоть число заказов растет, заказов невыполненных (state <> 'closed') все время ограниченно. Последовал совету Интернета, и открытые заказы перенес в маленький предварительный запрос

select id from product_accounting_order where state <> 'cancelled'

а результат вставляю в большой запрос:

INSERT INTO to_reserve_mcr (cid, to_reserve) SELECT distinct g.id, ROUND(SUM(pacr.volume_discontented), 5) FROM good AS g LEFT JOIN good_in_group as gig ON gig.good_id = g.id LEFT JOIN product_accounting_component_reserve as pacr ON pacr.component_id = g.id where FIND_IN_SET(pacr.order_id, "263,264,457,526,536,596,602,603") AND FIND_IN_SET(gig.group_id, "125,132,160,233,136,252,134,313,162,312") GROUP BY g.id

Время выполнения запроса сократилось в 10 раз.

В систему управления производством Завод365 в службу главного механика внедренные бизнес-процессы приёмки ответственным за оборудование регламентов на техническое обслуживание оборудования

февраль, 2026

завод365

автоматизация производства

Для удобного оформления заказа в калькуляторе и продажи продукции, в которой есть комплектующие к основному товару, мы предлагаем наше решение - набор правил совместимости продукции, успешно реализованное на проекте Profildoors.Trade.

декабрь, 2025

дилер365

конструктор365

С введением адресного хранения в системе управления производством Завод365 мы переработали блок инвентаризации

январь, 2026

завод365

автоматизация производства

На проекте Конструктор365 для компании Профильдорс Трейд наша команда успешно реализовала новый механизм привязки изображений товаров, направленный на повышение точности отображения продукции.

ноябрь, 2025

дилер365

онлайн-калькулятор

конструктор365

автоматизация продаж

В системе управления производством Завод365 обновлен функционал производственных календарей.

декабрь, 2025

завод365

конструктор365

В интерфейс расчета себестоимости изделия в системе Завод365 введены группы параметров для облегчения их ввода

октябрь, 2025

конструктор365

онлайн-калькулятор

завод365