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

теги:

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 раз.

Обновили дизайн, структурировали наши услуги, почистили портфолио от старых проектов

январь, 2025

сайт

datainlife

Для проекта TCL мы разработали модуль рассылок информации по дилерской сети

январь, 2024

вендор365

дилер365

дистрибьтор

Система управления производством Завод365 отслеживает сроки эксплуатации средств контроля и защиты (СК и СИЗ), а также проводит процедуру утверждения выдачи рабочему материальных ценностей

декабрь, 2024

завод365

Планы продаж, отчеты продаж, рекомендованные розничные цены

декабрь, 2023

дилер

дистрибьтор

вендор365

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

Виды товаров, каталог товаров, коллекции, бренды, характеристики учета, поставки товаров, предзаказы

июнь, 2024

дилер

дистрибьтор

вендор365

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

Компания Терморос занимается оптовыми продажами отечественной, европейской и азиатской продукции лидирующих брендов на рынке Danfoss, Purmo, Rifar, Grundfos, Baxi, Reflex, FAR, Jaga и собственной продукции. Группы компаний «Терморос» – Gekon, Euros, Germanium, Atlant. Основная задача — автоматизация оптовой торговли.

июнь, 2023

дилер365

мобильное приложение