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

теги:

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 у инженера системы менеджмента качества появилась возможность прикреплять инструмент контроля или измерения к контрольному параметру операции в технологической карте изделия при просмотре производственного заказа

август, 2025

завод365

Блок переведен на новый интерфейс. Также введена процедура автоматического закрытия нарядов рабочих на конец текущего дня.

июль, 2025

завод365

У мастера производства появилась возможность прикреплять оснастку к технологической карте изделия при просмотре производственного заказа

июнь, 2025

завод365

Для формирования счета на оплату розничному покупателю в системе Дилер365 появилась возможность добавить один или несколько расчетных счетов контрагенту

июль, 2025

дилер365

дистрибьтор

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

вендор365

личный кабинет

Наряду с рабочим местом логиста (центр управления доставкой ЦУД) в системе Завод365 разработан интерфейс для менеджеров продаж. В нем менеджер видит полную картину в части доставки заказов своих клиентов

август, 2025

завод365

Внесли доработки функционала Завод365 в части печати этикеток чернильным маркиратором

март, 2025

завод365

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