Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 как оптимизировать такой update  [new]
Irhen
Member

Откуда:
Сообщений: 265
Простите за нубство...
Имеется update таблицы агрегатными значениями (max, min, avg) по условию сравнения с ними. Как оптимально и красиво сделать такой апдейт?
UPDATE scott.emp
   SET sal = (SELECT AVG (sal) FROM  scott.emp)
 WHERE sal< (SELECT AVG (sal) FROM  scott.emp)
4 дек 12, 12:40    [13574427]     Ответить | Цитировать Сообщить модератору
 Re: как оптимизировать такой update  [new]
xtender
Member

Откуда: Мск
Сообщений: 3221
UPDATE scott.emp
   SET sal = greatest(sal,(SELECT AVG (sal) FROM  scott.emp))
хотя меня что-то тут интуитивно смущает, ну уж как есть
4 дек 12, 12:45    [13574491]     Ответить | Цитировать Сообщить модератору
 Re: как оптимизировать такой update  [new]
В.И.Ленин
Guest
Да будет жив социализм! Все должны быть равны. Ура, ура, ураааа!
4 дек 12, 12:47    [13574506]     Ответить | Цитировать Сообщить модератору
 Re: как оптимизировать такой update  [new]
ILoveCoffee
Member

Откуда: Astana
Сообщений: 985
xtender,
Ну, раньше была хоть where кляуза.
4 дек 12, 12:48    [13574514]     Ответить | Цитировать Сообщить модератору
 Re: как оптимизировать такой update  [new]
xtender
Member

Откуда: Мск
Сообщений: 3221
В.И.Ленин,

Irhen
 WHERE sal <  (SELECT AVG (sal) FROM  scott.emp)

угу, все равны, а некоторые "равнее"
4 дек 12, 12:49    [13574524]     Ответить | Цитировать Сообщить модератору
 Re: как оптимизировать такой update  [new]
xtender
Member

Откуда: Мск
Сообщений: 3221
ILoveCoffee,

це sqlgolf
4 дек 12, 12:51    [13574537]     Ответить | Цитировать Сообщить модератору
 Re: как оптимизировать такой update  [new]
Irhen
Member

Откуда:
Сообщений: 265
xtender,
Спасибо. Ну пример, конечно смешной. Но что делать :)
4 дек 12, 13:05    [13574656]     Ответить | Цитировать Сообщить модератору
 Re: как оптимизировать такой update  [new]
xtender
Member

Откуда: Мск
Сообщений: 3221
Irhen,

погодите-погодите... это не всеееее... еще write consistancy ща приплетем и получится что-то еще более монстрообразное типа:
UPDATE emp e1 SET sal = greatest(sal,(SELECT AVG (sal) FROM  emp e2 where e1.sal*0 = e1.sal*0))
where e1.sal is not null;

4 дек 12, 13:13    [13574719]     Ответить | Цитировать Сообщить модератору
 Re: как оптимизировать такой update  [new]
xtender
Member

Откуда: Мск
Сообщений: 3221
поправка
xtender
Irhen,

погодите-погодите... это не всеееее... еще write consistancy ща приплетем и получится что-то еще более монстрообразное типа:
UPDATE emp e1 SET sal = greatest(sal,(SELECT AVG (sal) FROM  emp e2 where e1.sal*0 = e2.sal*0))
where e1.sal is not null;


4 дек 12, 13:14    [13574727]     Ответить | Цитировать Сообщить модератору
 Re: как оптимизировать такой update  [new]
Павел Воронцов
Member

Откуда: Новосибирск
Сообщений: 2123
Блог
Irhen
xtender,
Спасибо. Ну пример, конечно смешной. Но что делать :)
Главное - запускать надо несколько раз до полной социализации...
4 дек 12, 13:15    [13574736]     Ответить | Цитировать Сообщить модератору
 Re: как оптимизировать такой update  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 26438
Irhen
Простите за нубство...
Имеется update таблицы агрегатными значениями (max, min, avg) по условию сравнения с ними. Как оптимально и красиво сделать такой апдейт?
UPDATE scott.emp
   SET sal = (SELECT AVG (sal) FROM  scott.emp)
 WHERE sal< (SELECT AVG (sal) FROM  scott.emp)


А чем тебе так не красиво ?
(или не оптимально?)
4 дек 12, 13:39    [13574900]     Ответить | Цитировать Сообщить модератору
 Re: как оптимизировать такой update  [new]
Добрый Э - Эх
Guest
MasterZiv,

У ораклистов запрос считается некошерным, если он более одного раза лезет в каждую из таблиц и при этом ещё делает совершенно одну и ту же работу. А в исходном варианте автора видно, что для получения условий фильтрации и расчета нового значения выполняется абсолютно идентичный запрос. Вполне логичное желание - избавиться от такого излишества.
4 дек 12, 13:45    [13574959]     Ответить | Цитировать Сообщить модератору
 Re: как оптимизировать такой update  [new]
xtender
Member

Откуда: Мск
Сообщений: 3221
MasterZiv,

Хуже всего что очередной шаг на пути к уравниловке может либо привести к исходному, либо оказаться полумерой, несмотря на очевидное классовое неравенство ...
4 дек 12, 13:51    [13575018]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить
 
Лучший учебный центр Microsoft!
Новейшие курсы Microsoft SQL Server 2014!
Статус Academy Oracle. Очень привлекательные цены на курсы Oracle!
Отсрочка платежа или скидка 5% на комплексные программы!