Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 INSERT or DELETE что дешевле весит, и когда  [new]
Jafa
Member

Откуда:
Сообщений: 132
Я пытаюсь подобрать оптимальный способ обновления таблицы.
Пример:
Есть две таблицы trg и src:
CREATE TABLE src (pmid INT PRIMARY KEY, str1 VARCHAR(MAX), str2 VARCHAR(MAX), ...., str101 VARCHAR(MAX));
CREATE TABLE trg (pmid INT PRIMARY KEY, str1 VARCHAR(MAX), str2 VARCHAR(MAX), ...., str101 VARCHAR(MAX));
Обе таблицы одинаковы и содержат одни и теже данные, но src является источником данных для trg.
В какой то момент времени, из таблицы src были удалены строки, ровно 50%. Чтобы синхронизировать trg из src, как вариант, можно выполнить один из двух способов:
1 вар.:	TRUNCATE TABLE trg; INSERT INTO trg SELECT src.* FROM src;
2 вар.: DELETE trg WHERE NOT EXISTS(SELECT id FROM src WHERE src.pmid = trg.pmid);
я думаю, что первый вариант будет выгодным, если в таблице src будет удалено 90% строк, а второй, когда в таблице будет удалено только 10%. Но вопрос в том, при каком количестве удаленных строк (примерно), оба варианта одинаково весят? И что на этот ответ влияет?
28 ноя 16, 16:26    [19943519]     Ответить | Цитировать Сообщить модератору
 Re: INSERT or DELETE что дешевле весит, и когда  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
MERGE не любите?

Замешивать DDL (TRUNCATE) в DML (INSERT, DELETE) - это, вообще говоря, неправильно.
28 ноя 16, 16:29    [19943538]     Ответить | Цитировать Сообщить модератору
 Re: INSERT or DELETE что дешевле весит, и когда  [new]
Jafa
Member

Откуда:
Сообщений: 132
iap,
TRUNCATE DDL это, или DML - спорный вопрос, лучше его тут не обсуждать.
28 ноя 16, 16:45    [19943624]     Ответить | Цитировать Сообщить модератору
 Re: INSERT or DELETE что дешевле весит, и когда  [new]
Jafa
Member

Откуда:
Сообщений: 132
iap,
MERGE любля, и очень, но в данном случае данные только удаляются.
28 ноя 16, 16:47    [19943631]     Ответить | Цитировать Сообщить модератору
 Re: INSERT or DELETE что дешевле весит, и когда  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
Jafa,

Для сферического коня будет 50%, в реальности для каждого случая (таблицы, индексы, ключи, железо в конце концов) процент будет свой и ваш вопрос не имеет ответа.
Если ситуация разовая, не вижу смысла что то выяснять, нужно просто делать.
Если ситуация постоянная имеет смысл пересмотреть структуру базы в сторону секционирования, либо с учетом вашего str101 VARCHAR(MAX) в сторону возможно filestream или filetable.
28 ноя 16, 16:49    [19943643]     Ответить | Цитировать Сообщить модератору
 Re: INSERT or DELETE что дешевле весит, и когда  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Jafa
iap,
TRUNCATE DDL это, или DML - спорный вопрос, лучше его тут не обсуждать.

мда

автор
MERGE любля, и очень, но в данном случае данные только удаляются.

кто-то заставляет делать другие операции?

если
автор
если в таблице src будет удалено 90% строк, а второй, когда в таблице будет удалено только 10%.

MERGE нормальный вариант
28 ноя 16, 16:50    [19943650]     Ответить | Цитировать Сообщить модератору
 Re: INSERT or DELETE что дешевле весит, и когда  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
Jafa
iap,
TRUNCATE DDL это, или DML - спорный вопрос, лучше его тут не обсуждать.
Но ответ - бесспорный!
Да и права на TRUNCATE нужны другие, не такие как на SELECT, DELETE, INSERT, UPDATE, MERGE
28 ноя 16, 16:51    [19943652]     Ответить | Цитировать Сообщить модератору
 Re: INSERT or DELETE что дешевле весит, и когда  [new]
invm
Member

Откуда: Москва
Сообщений: 9402
Первый вариант предпочтительнее, если модель восстановления simple или bulk_logged. В этом случае возможна вставка с минимальным журналированием. Читайте - https://technet.microsoft.com/en-us/library/dd425070(v=sql.100).aspx
28 ноя 16, 16:54    [19943677]     Ответить | Цитировать Сообщить модератору
 Re: INSERT or DELETE что дешевле весит, и когда  [new]
Верблюд
Member

Откуда: Яженичеловек!!!
Сообщений: 65007
Проще создать новую таблицу, залить в нее данные, а потом "переключить" ее всю с помощью sp_rename
28 ноя 16, 17:01    [19943713]     Ответить | Цитировать Сообщить модератору
 Re: INSERT or DELETE что дешевле весит, и когда  [new]
o-o
Guest
Верблюд
Проще создать новую таблицу, залить в нее данные, а потом "переключить" ее всю с помощью sp_rename

разрешения на таблицу тоже "переключите" переименованием?
сказали уже, инсертить с таблоком.
в простой модели залигируется тожно так же, как и select into, т.е. минимально
delete же полностью логируется
28 ноя 16, 17:11    [19943781]     Ответить | Цитировать Сообщить модератору
 Re: INSERT or DELETE что дешевле весит, и когда  [new]
Jafa
Member

Откуда:
Сообщений: 132
iap,
я не сторонник того, что truncate есть DML, я этого не буду доказывать. Просто есть сторонники того, что эта конструкция является DML.
Интересно, если Microsoft таки решит сделать триггер на truncate, то он будет относиться к триггерам DDL или DML?
Относительно MERGE, эта конструкция вполне подходит, но производительность ее изменяется, если в конце добавить
WHEN NOT MATCHED BY SOURCE THEN DELETE
. Дешевле получается выполнить отдельно DELETE, а потом MERGE))) или это только в моем случае?
28 ноя 16, 17:15    [19943804]     Ответить | Цитировать Сообщить модератору
 Re: INSERT or DELETE что дешевле весит, и когда  [new]
Jafa
Member

Откуда:
Сообщений: 132
invm
Первый вариант предпочтительнее, если модель восстановления simple или bulk_logged. В этом случае возможна вставка с минимальным журналированием. Читайте - https://technet.microsoft.com/en-us/library/dd425070(v=sql.100).aspx

Да, это говорит что в случае удаления 50% строк, лучше использовать INSERT, так как он не запихивает данные в журнал. Но если было удалено 10% строк, то выгоднее DELETE.
28 ноя 16, 17:18    [19943816]     Ответить | Цитировать Сообщить модератору
 Re: INSERT or DELETE что дешевле весит, и когда  [new]
Jafa
Member

Откуда:
Сообщений: 132
так когда выгоднее делать DELETE вместо INSERT? когда было удалено 30%, 40%, 45% строк в таблице src?
По Oracle есть прекрасная книга "ORACLE - основы стоимостной оптимизации", мне не хватает ее по SQL Server :)
28 ноя 16, 17:31    [19943878]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить