powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / JOIN запрос из ХХх таблиц, тормоза ..
4 сообщений из 4, страница 1 из 1
JOIN запрос из ХХх таблиц, тормоза ..
    #39641187
Доброго времени суток!

Уважаемые Гуру, необходима помощь в оптимизации запроса.

Впервые появилась необходимость многоэтажного матазапроса.
Есть таблиц:
zakazdetal - заказанные позиции
manufacture_consist - позиции в производстве
production_motion_consist - выданные позиции
Хотелось одним запросом сделать выборку заказанных позиций, которые не выданы или не в производстве или количество не соответствует заказу.
Вроде бы нарисовал все верно, индексы в таблицах есть по всем полям выборки.
Но тормозит жууутко!
zakazdetal - около 30 000 записей, manufacture_consist - около 10, production_motion_consist - около 3000

Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT *
FROM zakazdetal A
LEFT JOIN manufacture_consist B ON A.id = B.orderdetal_id
LEFT JOIN zakaz C ON A.zakid = C.id
LEFT JOIN production_motion_consist D ON A.id=D.orderdetal_id
WHERE (B.orderdetal_id IS NULL or (B.kol<>A.kol))
OR (D.orderdetal_id IS NULL or (D.kol<>A.kol))


Там еще пару JOIN будут, но не суть..
...
Рейтинг: 0 / 0
JOIN запрос из ХХх таблиц, тормоза ..
    #39641188
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте избавиться от OR в условиях, заменив один запрос на пачку объединяемых через UNION ALL. Тем более что при этом в части запросов вместо LEFT JOIN получите INNER, что само по себе хорошо.
А заодно замените абстрактную звезду на список конкретных реально нужных полей.
...
Рейтинг: 0 / 0
JOIN запрос из ХХх таблиц, тормоза ..
    #39641197
Я пробовал убирать условия вообще и менял OR на AND, но в итоге это не помогало, все равно запрос тормозит.
Да, я в своем запросе использую конкретные поля, * указал для упрощения вида.

Пробовал через SUM() - тормозит еще сильнее
Код: sql
1.
2.
3.
4.
select  zakazdetal.id, 
(select sum(kol) from manufacture_consist where manufacture_consist.orderdetal_id=zakazdetal.id) as manufactured, 
(select sum(kol) from production_motion_consist where production_motion_consist.orderdetal_id=zakazdetal.id) as released 
from zakazdetal



С использованием UNION чего то не могу втыкнуться, как проставить необходимое мне условие.
Код: sql
1.
2.
3.
4.
5.
select distinct(orderdetal_id), ordered, manufactured, released from
(select id as orderdetal_id, kol as ordered, 0 as manufactured, 0 as released from zakazdetal
union all select orderdetal_id, 0 as ordered, kol as manufactured, 0 as released from manufacture_consist
union all select orderdetal_id,  0 as ordered, 0 as manufactured, kol as released from production_motion_consist
) as ZD order by orderdetal_id



Из подзапроса
Код: sql
1.
select id as orderdetal_id, kol as ordered, 0 as manufactured, 0 as released from zakazdetal


не взять параметр
Код: sql
1.
union all select orderdetal_id, 0 as ordered, kol as manufactured, 0 as released from manufacture_consist [color=red]where manufacture_consist .orderdetal_id=zakazdetal.id[/color] 
...
Рейтинг: 0 / 0
JOIN запрос из ХХх таблиц, тормоза ..
    #39642964
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модератор: Флуд, оффтоп и пикировки зачищены.
Прошу впредь воздерживаться.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / JOIN запрос из ХХх таблиц, тормоза ..
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]