SQL.RU
 client/server technologies
 
 Главная | Документация | Статьи | Книги | Форум | Опросы | Рассылка | Работа | Поиск | FAQ |

Добро пожаловать в форум, Guest  >>  Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик  Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Merge или DELETE+INSERT   [new]
Babsik
Member

Откуда:
Сообщений: 16
Есть у меня большая секционированная таблица, содержащая данные по расчетам.
Когда я пересчитываю целиком данные за определенный промежуток времени как будет быстрее?

DELETE from ... where dt between ...
insert into...
или
MERGE
9 апр 08, 11:26    [5523127] Ответить | Цитировать    Сообщить модератору

 Re: Merge или DELETE+INSERT   [new]
badmintonist
Member

Откуда:
Сообщений: 330
Babsik
Есть у меня большая секционированная таблица, содержащая данные по расчетам.
Когда я пересчитываю целиком данные за определенный промежуток времени как будет быстрее?

DELETE from ... where dt between ...
insert into...
или
MERGE
Чего то не припомню чтобы MERGE удалял записи
9 апр 08, 11:29    [5523146] Ответить | Цитировать    Сообщить модератору

 Re: Merge или DELETE+INSERT   [new]
Человек и Кошка
Guest
Babsik
Когда я пересчитываю целиком данные за определенный промежуток времени как будет быстрее?

Если "определенный промежуток времени" = секция, то быстрее всего так ...
9 апр 08, 11:37    [5523225] Ответить | Цитировать    Сообщить модератору

 Re: Merge или DELETE+INSERT   [new]
Babsik
Member

Откуда:
Сообщений: 16
Ну там по смыслу если я считаю новый день то нужен INSERT, если посчитынный день, то UPDATE.
И разве в 10 в Меrge нет DELETE?
9 апр 08, 11:40    [5523259] Ответить | Цитировать    Сообщить модератору

 Re: Merge или DELETE+INSERT   [new]
pravednik
Member

Откуда: Киев
Сообщений: 11330
Babsik

И разве в 10 в Меrge нет DELETE?

а когда он там был ))
9 апр 08, 11:42    [5523276] Ответить | Цитировать    Сообщить модератору

 Re: Merge или DELETE+INSERT   [new]
Babsik
Member

Откуда:
Сообщений: 16
Человек и Кошка
Babsik
Когда я пересчитываю целиком данные за определенный промежуток времени как будет быстрее?

Если "определенный промежуток времени" = секция, то быстрее всего так ...


В том то и дело что секция у меня месяц. А пересчет может потребоватся произвольного периода.
9 апр 08, 11:42    [5523277] Ответить | Цитировать    Сообщить модератору

 Re: Merge или DELETE+INSERT   [new]
Babsik
Member

Откуда:
Сообщений: 16
pravednik
Babsik

И разве в 10 в Меrge нет DELETE?

а когда он там был ))

Признаю в этом я ошибся... но задавая вопрос я имел ввиду использование Merge в виде
WHEN MATCHED THEN UPDATE
WHEN NOT MATCHED THEN INSERT
9 апр 08, 11:45    [5523296] Ответить | Цитировать    Сообщить модератору

 Re: Merge или DELETE+INSERT   [new]
badmintonist
Member

Откуда:
Сообщений: 330
Babsik
В том то и дело что секция у меня месяц. А пересчет может потребоватся произвольного периода.
Можно установить регламент пересчетов исходя из здравого смысла, т.е. пересчитывать за месяц (два, три) и не париться, не всегда надо идти на поводу у хотелки
9 апр 08, 11:49    [5523330] Ответить | Цитировать    Сообщить модератору

 Re: Merge или DELETE+INSERT   [new]
wurdu
Member

Откуда: Владивосток
Сообщений: 1411
Babsik
Признаю в этом я ошибся

Ну я бы не сказал что так уж сильно ошибся :)

MERGE INTO bonuses D
USING (SELECT employee_id, salary, department_id FROM employees
WHERE department_id = 80) S
ON (D.employee_id = S.employee_id)
WHEN MATCHED THEN UPDATE SET D.bonus = D.bonus + S.salary*.01
DELETE WHERE (S.salary > 8000)
WHEN NOT MATCHED THEN INSERT (D.employee_id, D.bonus)
VALUES (S.employee_id, S.salary*0.1)
WHERE (S.salary <= 8000);
9 апр 08, 11:51    [5523343] Ответить | Цитировать    Сообщить модератору

 Re: Merge или DELETE+INSERT   [new]
Babsik
Member

Откуда:
Сообщений: 16
Задача требует пересчета если в момент проверки (12 ночи) было обнаружено что данные для счета были изменены...
9 апр 08, 11:52    [5523352] Ответить | Цитировать    Сообщить модератору

 Re: Merge или DELETE+INSERT   [new]
badmintonist
Member

Откуда:
Сообщений: 330
Babsik
Признаю в этом я ошибся... но задавая вопрос я имел ввиду использование Merge в виде
WHEN MATCHED THEN UPDATE
WHEN NOT MATCHED THEN INSERT
Так если в наборе данных полученных в результате нового расчета не будет записи, которая имелась в прошлом расчете, merge не удалит эту запись
9 апр 08, 11:53    [5523359] Ответить | Цитировать    Сообщить модератору

 Re: Merge или DELETE+INSERT   [new]
Двоюшник
Member

Откуда: Киев
Сообщений: 1123
pravednik
Babsik

И разве в 10 в Меrge нет DELETE?

а когда он там был ))

Он ьам и есть но только вместе с апдейт. Из той же доки:
MERGE INTO bonuses D
   USING (SELECT employee_id, salary, department_id FROM employees
   WHERE department_id = 80) S
   ON (D.employee_id = S.employee_id)
   WHEN MATCHED THEN UPDATE SET D.bonus = D.bonus + S.salary*.01
     DELETE WHERE (S.salary > 8000)
   WHEN NOT MATCHED THEN INSERT (D.employee_id, D.bonus)
     VALUES (S.employee_id, S.salary*0.1)
     WHERE (S.salary <= 8000);
9 апр 08, 11:53    [5523361] Ответить | Цитировать    Сообщить модератору

 Re: Merge или DELETE+INSERT   [new]
pravednik
Member

Откуда: Киев
Сообщений: 11330
Двоюшник
pravednik
Babsik

И разве в 10 в Меrge нет DELETE?

а когда он там был ))

Он ьам и есть но только вместе с апдейт. Из той же доки:
MERGE INTO bonuses D
   USING (SELECT employee_id, salary, department_id FROM employees
   WHERE department_id = 80) S
   ON (D.employee_id = S.employee_id)
   WHEN MATCHED THEN UPDATE SET D.bonus = D.bonus + S.salary*.01
     DELETE WHERE (S.salary > 8000)
   WHEN NOT MATCHED THEN INSERT (D.employee_id, D.bonus)
     VALUES (S.employee_id, S.salary*0.1)
     WHERE (S.salary <= 8000);

уже понял....сори, просто не доглядел.
9 апр 08, 11:54    [5523370] Ответить | Цитировать    Сообщить модератору

 Re: Merge или DELETE+INSERT   [new]
badmintonist
Member

Откуда:
Сообщений: 330
Babsik
Задача требует пересчета если в момент проверки (12 ночи) было обнаружено что данные для счета были изменены...
А ты точно можешь определить период пересчета, если речь идет о конкретном счете то обновлять данные надо по идентификатору счета а не по датам?
9 апр 08, 11:59    [5523424] Ответить | Цитировать    Сообщить модератору

 Re: Merge или DELETE+INSERT   [new]
Babsik
Member

Откуда:
Сообщений: 16
badmintonist
Babsik
Признаю в этом я ошибся... но задавая вопрос я имел ввиду использование Merge в виде
WHEN MATCHED THEN UPDATE
WHEN NOT MATCHED THEN INSERT
Так если в наборе данных полученных в результате нового расчета не будет записи, которая имелась в прошлом расчете, merge не удалит эту запись


Ну не происходит у меня удаления данных, только новые появляются ;)
Я вопрос задал в разрезе производительности... В первом варианте я удаляю большой объем данных, происходит генерация журналов отката и т.д.
С другой стороны не очень понятно механика работы MERGE...
Вот и спрашиваю может ли кто-то объяснить как быстрее?

Спасибо всем за разъяснение Merge в 10... просто сам работаю на 9, и доки под рукой 10 не было...
9 апр 08, 12:00    [5523429] Ответить | Цитировать    Сообщить модератору

 Re: Merge или DELETE+INSERT   [new]
Babsik
Member

Откуда:
Сообщений: 16
badmintonist
Babsik
Задача требует пересчета если в момент проверки (12 ночи) было обнаружено что данные для счета были изменены...
А ты точно можешь определить период пересчета, если речь идет о конкретном счете то обновлять данные надо по идентификатору счета а не по датам?

Там идея такая... если обновились данные за первое число, то требуется пересчитать данные с 1 числа до сегодняшней даты...
9 апр 08, 12:02    [5523462] Ответить | Цитировать    Сообщить модератору

 Re: Merge или DELETE+INSERT   [new]
Двоюшник
Member

Откуда: Киев
Сообщений: 1123
2 Автор: Думаю пора уже тестовый пример вылаживать...

---
Ну ты заходи ежели чё...
9 апр 08, 12:06    [5523502] Ответить | Цитировать    Сообщить модератору

 Re: Merge или DELETE+INSERT   [new]
badmintonist
Member

Откуда:
Сообщений: 330
Babsik
Ну не происходит у меня удаления данных, только новые появляются ;)
Даже когда меняют дату счета?

Babsik
В первом варианте я удаляю большой объем данных, происходит генерация журналов отката и т.д.
Так вам по первой ссылке посоветовали truncate секции :)

Babsik
С другой стороны не очень понятно механика работы MERGE...
Вот и спрашиваю может ли кто-то объяснить как быстрее?
Так задача ваша не понятна, как тут объяснить, что для ее решения оптимальнее
9 апр 08, 12:07    [5523509] Ответить | Цитировать    Сообщить модератору

 Re: Merge или DELETE+INSERT   [new]
Babsik
Member

Откуда:
Сообщений: 16
... Попробую еще раз объяснить...
У меня есть некий реализованный алгоритм счета (SELECT), который возвращает посчитанные данные за определенный промежуток времени. Эти данные должны помещатся в некую секционированную таблицу (которая имеет секционирование по месяцам). Кол-во строк за день где-то 500-600тысяс. Вопрос как завернуть мой SELECT в процедуре?
В конструкцию вида DELETE...а потом INSERT
Или завернуть мой SELECT в Merge...

Вариант с Exchange partition не подходит т.к дата точки пересчета произвольна...

Меня интересует какой из вариантов быстрее и почему (если это поддается объяснению ;) )
9 апр 08, 12:20    [5523637] Ответить | Цитировать    Сообщить модератору

 Re: Merge или DELETE+INSERT   [new]
Двоюшник
Member

Откуда: Киев
Сообщений: 1123
Babsik
... Попробую еще раз объяснить...
У меня есть некий реализованный алгоритм счета (SELECT), который возвращает посчитанные данные за определенный промежуток времени. Эти данные должны помещатся в некую секционированную таблицу (которая имеет секционирование по месяцам). Кол-во строк за день где-то 500-600тысяс. Вопрос как завернуть мой SELECT в процедуре?
В конструкцию вида DELETE...а потом INSERT
Или завернуть мой SELECT в Merge...

Вариант с Exchange partition не подходит т.к дата точки пересчета произвольна...

Меня интересует какой из вариантов быстрее и почему (если это поддается объяснению ;) )

ещё раз: пример с тестовыми данными... иначе никак... мы же не знаем как у вас хранятся эти самые данные... тоесть, сначала до замены, и потом что должно получится в результате ... иначе это гадание на кофейной гуще...
9 апр 08, 12:27    [5523693] Ответить | Цитировать    Сообщить модератору

 Re: Merge или DELETE+INSERT   [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 8335
имхо, merge - тут к месту..
Ну и еще - про ddl (exchange) я бы таки еще раз подумал.
Ну и что, что границы произвольны - разве их невозможно отквантовать по границам сессий?
А если это величины разных порядков - не стоит ли подумать над изменением схемы секционирования на более технологичную? (напр. подсекций настрогать)
9 апр 08, 12:39    [5523808] Ответить | Цитировать    Сообщить модератору

 Re: Merge или DELETE+INSERT   [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 5029
Двоюшник

Он ьам и есть но только вместе с апдейт.


Well, WHEN MATCHED THEN UPDATE...DELETE WHERE compared to WHEN MATCHED THEN DELETE is Федот да not exactly тот :).

SY.
9 апр 08, 18:28    [5526612] Ответить | Цитировать    Сообщить модератору

 Re: Merge или DELETE+INSERT   [new]
Двоюшник
Member

Откуда: Киев
Сообщений: 1123
SY
Двоюшник

Он ьам и есть но только вместе с апдейт.


Well, WHEN MATCHED THEN UPDATE...DELETE WHERE compared to WHEN MATCHED THEN DELETE is Федот да not exactly тот :).

SY.

А если так?
WHEN MATCHED THEN UPDATE a=a DELETE WHERE 1=1
9 апр 08, 18:31    [5526627] Ответить | Цитировать    Сообщить модератору

 Re: Merge или DELETE+INSERT   [new]
Двоюшник
Member

Откуда: Киев
Сообщений: 1123
Двоюшник
SY
Двоюшник

Он ьам и есть но только вместе с апдейт.


Well, WHEN MATCHED THEN UPDATE...DELETE WHERE compared to WHEN MATCHED THEN DELETE is Федот да not exactly тот :).

SY.

А если так?
WHEN MATCHED THEN UPDATE a=a DELETE WHERE 1=1

понятное дело что не тот но все же он есть... и иногда даже можно воспользоватся такой кляузой :)
9 апр 08, 18:34    [5526643] Ответить | Цитировать    Сообщить модератору

 Re: Merge или DELETE+INSERT   [new]
Дубовая голова
Member [заблокирован]

Откуда: с цепи сорвался
Сообщений: 1821
Двоюшник
А если так?
WHEN MATCHED THEN UPDATE a=a DELETE WHERE 1=1


Судя по всему, автор несколько не то имел в виду :)

У него была мысль, что MERGE эквивалентен двум операторам: DELETE "старые данные, удовлетворяющие установленному условию (аналог условия ON в MERGE)" + INSERT "данные из таблицы-источника".

Только вот в многопользовательской среде это не есть эквивалент (statement-level read consistency). Не говоря уж о том, что DELETE генерирует не меньший объем undo чем UPDATE.
9 апр 08, 18:45    [5526683] Ответить | Цитировать    Сообщить модератору

Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить
Generated time: 250ms.
Rambler's Top100 Powered by ActualForum 1.5.3 [s1] Copyright (c) Alex Sibilev 2000-2010