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

теги:

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

конфигуратор

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

октябрь, 2025

конфигуратор

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

завод365

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

декабрь, 2025

дилер365

конфигуратор

Реализовано динамическое адресное хранение в системе управления производством Завод365

сентябрь, 2025

завод365

заказная разработка

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

ноябрь, 2025

дилер365

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

конфигуратор

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

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

август, 2025

завод365