Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запрос Update долго.... / 5 сообщений из 5, страница 1 из 1
12.07.2016, 09:05
    #39272168
sql111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос Update долго....
Может у кого есть идея.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
UPDATE Tovar
Tovar
LEFT JOIN (
SELECT * FROM Tovar WHERE Tovar.dozirovka IS NOT NULL
) tmp
ON Tovar.md5Drug = tmp.md5Drug
AND Tovar.idCountry = tmp.idCountry
AND Tovar.idForma = tmp.idForma
AND Tovar.idManufacturer = tmp.idManufacturer
AND Tovar.dozirovka IS NULL 
SET Tovar.dozirovka = tmp.dozirovka


Индексы отдельные по всем полям, но как-то очень странно медленно работает все это дело. 30 сек
...
Рейтинг: 0 / 0
12.07.2016, 10:04
    #39272224
bochkov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос Update долго....
На первый взгляд использование вложенного запроса избыточно
...
Рейтинг: 0 / 0
12.07.2016, 10:33
    #39272252
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос Update долго....
и зачем апдейтить всё, если смысл запроса, похоже, в том, чтобы обработать только нуллы?
...
Рейтинг: 0 / 0
12.07.2016, 10:34
    #39272253
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос Update долго....
А хотя нет, он же так и работает... тогда да, надо избавиться от вложенного запроса.
...
Рейтинг: 0 / 0
12.07.2016, 15:47
    #39272502
sql111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос Update долго....
одно из решений такое (0.3 sec):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
UPDATE Tovar
Tovar INNER JOIN
(SELECT Tovar.* FROM (SELECT * FROM Tovar T
WHERE T.dozirovka IS NULL
AND EXISTS (SELECT 1 FROM Tovar T2 WHERE T2.md5Drug = T.md5Drug AND T2.dozirovka IS NOT NULL
AND T2.idCountry = T.idCountry
AND T2.idForma = T.idForma
AND T2.idManufacturer = T.idManufacturer
AND T2.id<>T.id
)) as tmp
INNER JOIN Tovar
ON Tovar.md5Drug = tmp.md5Drug
AND Tovar.idCountry = tmp.idCountry
AND Tovar.idForma = tmp.idForma
AND Tovar.idManufacturer = tmp.idManufacturer
WHERE Tovar.dozirovka IS NOT NULL
GROUP BY Tovar.md5Drug,Tovar.dozirovka
ORDER BY NULL) tmpS
ON  Tovar.md5Drug = tmpS.md5Drug
AND Tovar.idCountry = tmpS.idCountry
AND Tovar.idForma = tmpS.idForma
AND Tovar.idManufacturer = tmpS.idManufacturer
AND Tovar.dozirovka IS NULL
SET Tovar.dozirovka = tmpS.dozirovka
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запрос Update долго.... / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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