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

теги:

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 в Дилер365 автоматизирует подбор характеристик, расчет цен и формирование сопутствующих товаров для B2B/B2C заказов, сокращая время работы менеджера с часов до секунд

апрель, 2026

дилер365

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

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

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

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

февраль, 2026

завод365

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

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

апрель, 2026

дилер365

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

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

дилер

дистрибьютор

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

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

январь, 2026

завод365

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

Реализован проект по интеграции платформы дилерской сети Дилер365 с розничными CRM и учётной системой 1С дилера.

март, 2026

дилер365

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

дилер

дистрибьютор

b2b

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

декабрь, 2025

завод365

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