Форум программистов, компьютерный форум, киберфорум
Наши страницы
Oracle
Войти
Регистрация
Восстановить пароль
 
StalkerIQ
20 / 18 / 3
Регистрация: 21.05.2013
Сообщений: 390
1

Update VS DELETE and INSERT

28.09.2018, 09:57. Просмотров 115. Ответов 6
Метки нет (Все метки)

Подскажите пожалуйста, что будет дороже на выполнение.

Процедура Begin

1) Delete 1 строка, а потом вставка строки с другими значениями в таблицу.

или

2) Update той же строки в той же таблице "изменить надо два поля" (два значения)

commit;

end;

Буду благодарен если объясните почему то или иное дороже... по слухам update всё равно дороже даже учитывая что в 1 варианте два действия.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.09.2018, 09:57
Ответы с готовыми решениями:

ON DELETE и ON UPDATE
Доброго всем времени суток! При попытке создания таблицы CREATE TABLE ggroups (id varchar(10)...

Trigger INSERT, DELETE
Подскажите как в триггере понять на что он сработал на DELETE или INSERT? Чтоб можно сделать...

Триггер на Insert/Update
Вечер добрый. Создал триггер, который на Insert должен проверять есть-ли запись с некоторыми...

Update и Insert в одном запросе
Народ, как без использования процедур написать такой запрос: если запись с таким-то ключом есть -...

Oracle trigger insert update
Уважаемые знатоки! имеется таблица create table UM_SESSION ( SESSION_ID NUMBER not null, ...

6
Grossmeister
Модератор
3404 / 2457 / 419
Регистрация: 21.01.2011
Сообщений: 10,776
28.09.2018, 10:43 2
Цитата Сообщение от StalkerIQ Посмотреть сообщение
по слухам update всё равно дороже
Это только слухи. В нормальной ситуации используется UPDATE, связка DELETE / INSERT только в особых случаях, определяемых бизнес-условиями.
По поводу почему - это надо много объяснять про архитектуру Oracle, лучше самому почитать том доки "Concepts"
Например, и DELETE, и INSERT приводят к корректировке индексов таблицы, тогда как UPDATE - только если затронуты поля, участвующие в индексе, да и в этом случае будет одна корректировка, но не две.
И DELETE, и INSERT требуют возможной корректировки свободного пространства (свободных блоков) таблицы, а UPDATE -нет.
И т.д.
1
mibin
73 / 67 / 16
Регистрация: 21.10.2009
Сообщений: 378
28.09.2018, 12:57 3
update - 1 операция
delete и insert - 2е операции
0
StalkerIQ
20 / 18 / 3
Регистрация: 21.05.2013
Сообщений: 390
28.09.2018, 13:25  [ТС] 4
Цитата Сообщение от Grossmeister Посмотреть сообщение
Например, и DELETE, и INSERT приводят к корректировке индексов таблицы, тогда как UPDATE - только если затронуты поля, участвующие в индексе, да и в этом случае будет одна корректировка, но не две.
И DELETE, и INSERT требуют возможной корректировки свободного пространства (свободных блоков) таблицы, а UPDATE -нет.
Не много, но за эту инфу спасибо.

Цитата Сообщение от mibin Посмотреть сообщение
update - 1 операция
delete и insert - 2е операции
Спасибо КЭП.

Подскажите Update разве не открывает сначала таблицу типа в режиме edit, вносит изменения потом закрывает и ждёт commit?
Тогда как Delete вроде так не делает, но тоже ждёт commit?
Ну и к примеру из разряда может ли так? Если в таблице 2 поля то update быстрее сработает ежели там было бы 150 полей?
Тот же вопрос и к Delete скорей всего удалить 1 строку с 2 полями быстрее чем с 150 полями?
0
mibin
73 / 67 / 16
Регистрация: 21.10.2009
Сообщений: 378
28.09.2018, 13:29 5
Цитата Сообщение от StalkerIQ Посмотреть сообщение
Подскажите Update разве не открывает сначала таблицу типа в режиме edit, вносит изменения потом закрывает и ждёт commit?
В Oracle нет вообще такого понять как открыть на Edit, это всё из Delphi, C++, C# и т.д. при работе с гридами.
Рассказывать долго, но про количество операций я не просто так написал или поиздеваться, дело в том что когда ты делаешь delete у тебя в журнал undo падает информация о том что было в этой строке, в журнал redo падает информация о новом значении, потом в буфере блоков подменяется старое значение на новое, потом ты делаешь insert и опять такая же фигня происходит, в случае update всё это один раз идёт.

И это всё не учитвая индексом, constraint, matview и т.д. что влияет на скорость транзакций.
0
StalkerIQ
20 / 18 / 3
Регистрация: 21.05.2013
Сообщений: 390
28.09.2018, 14:58  [ТС] 6
Цитата Сообщение от mibin Посмотреть сообщение
В Oracle нет вообще такого понять как открыть на Edit, это всё из Delphi, C++, C# и т.д. при работе с гридами.
Рассказывать долго, но про количество операций я не просто так написал или поиздеваться, дело в том что когда ты делаешь delete у тебя в журнал undo падает информация о том что было в этой строке, в журнал redo падает информация о новом значении, потом в буфере блоков подменяется старое значение на новое, потом ты делаешь insert и опять такая же фигня происходит, в случае update всё это один раз идёт.
Что-то не сходится всё свершается после того как commit случился.))
Что значит?
Цитата Сообщение от mibin Посмотреть сообщение
в случае update всё это один раз идёт.
Один раз "всё"? всё - это много? Сколько это действий?

Допустим, что я возьму за чистую монету про "буфере блоков" даже соглашусь с тем что есть undo и redo ведь как-то откат он делает.

То есть получается, что при delete создаются две записи undo и redo и потом при insert ещё две записи undo и redo

А при update как? один раз что ли создаётся undo и redo?
0
mibin
73 / 67 / 16
Регистрация: 21.10.2009
Сообщений: 378
28.09.2018, 15:20 7
Цитата Сообщение от StalkerIQ Посмотреть сообщение
Что-то не сходится всё свершается после того как commit случился.))
А вот и не правда! Всё свершается до commit, после commit транзакция считается завершенной и данные в undo не нужными становятся.
Именно поэтому commit работает БЫСТРЕЕ чем rollback, rollback - как следствие МЕДЛЕННЕЕ чем commit, т.к. на время вызова комит уже всё сделано, а вот rollback придется всю эту кухню которая была наделана возвращать обратно из сегмента отката (журнал undo).

Цитата Сообщение от StalkerIQ Посмотреть сообщение
Один раз "всё"? всё - это много? Сколько это действий?
Один раз просто значение одного блока будет заменено и все...возьмет блок запишет его undo, потом redo потом сам блок поменяет...а если вызывать delete он будет очищать с этими всеми действия, а потом по результату когда выполните Insert он опять будет undo, redo и сам блок данных менять...

Цитата Сообщение от StalkerIQ Посмотреть сообщение
А при update как? один раз что ли создаётся undo и redo?
Да

Добавлено через 2 минуты
Цитата Сообщение от StalkerIQ Посмотреть сообщение
То есть получается, что при delete создаются две записи undo и redo и потом при insert ещё две записи undo и redo
3и операции: undo, redo, модификация блока

Добавлено через 2 минуты
Цитата Сообщение от StalkerIQ Посмотреть сообщение
Допустим, что я возьму за чистую монету про "буфере блоков" даже соглашусь с тем что есть undo и redo ведь как-то откат он делает.
Ну можете и не верить конечно я не заставляю, но это очень большая тема количество буферов и журналов в Oracle очень большое...и все хитросплетения тут не описать, надо читать книгу...как делается откат я примерно описал, по rollback данные достаются из журнала undo и подставляются обратно.

Добавлено через 50 секунд
В Oracle можно даже сделать запрос данных на прошлое время..т.е. вы изменили данные но всё равно можете увидеть те, которые были там несколько часов назад
0
28.09.2018, 15:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.09.2018, 15:20

UPDATE vs DELETE & INSERT
Есть таблица с несколькими полями, без первичного ключа. По ходу задачи необходимо обновлять...

Запросы с INSERT, UPDATE, DELETE
Помогите пожалуйста составить запросы на команды с INSERT, UPDATE, DELETE Таблица 1 - Predlozhenie...

Функция, которая возвращает имя пользователя, который вызвал UPDATE/DELETE/INSERT
Не могу нагуглить. Нужна функция которая возвращает имя пользователя который вызвал...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru