Когда я сталкиваюсь с задачей копирования записи в базу данных и изменения только нескольких значений, я склонен использовать временную таблицу, чтобы избежать выписывания всех неизмененных столбцов. Кто-нибудь знает, как это повлияет на производительность в крупномасштабной системе?
Быстрый пример (который также показывает, почему я предпочитаю метод временной таблицы):
Допустим, у меня есть таблица mytbl
с 50 столбцами col1
... col50
. Я хочу вставить новую запись, которая является точной копией строки, в которой col5 = 'Some Value'
за исключением того, что col45
будет установлено в 'Some other value'
.
Метод 1
CREATE GLOBAL TEMPORARY TABLE tmptbl AS
SELECT * FROM myschema.mytbl;
INSERT INTO tmptbl
(SELECT *
FROM myschema.mytbl
WHERE mytbl.col5 = 'Some Value');
UPDATE tmptbl
SET col45 = 'Some Other Value';
INSERT INTO myschema.mytbl
(SELECT * FROM tmptbl);
DROP TABLE tmptbl;
Метод 2
INSERT INTO myschema.mytbl (col1,
col2,
col3,
col4,
col5,
col6,
col7,
col8,
col9,
col10,
col11,
col12,
col13,
col14,
col15,
col16,
col17,
col18,
col19,
col20,
col21,
col22,
col23,
col24,
col25,
col26,
col27,
col28,
col29,
col30,
col31,
col32,
col33,
col34,
col35,
col36,
col37,
col38,
col39,
col40,
col41,
col42,
col43,
col44,
col45,
col46,
col47,
col48,
col49,
col50)
SELECT col1,
col2,
col3,
col4,
col5,
col6,
col7,
col8,
col9,
col10,
col11,
col12,
col13,
col14,
col15,
col16,
col17,
col81,
col19,
col20,
col21,
col22,
col23,
col24,
col25,
col26,
col27,
col28,
col29,
col30,
col31,
col32,
col33,
col34,
col35,
col36,
col37,
col38,
col39,
col40,
col41,
col42,
col43,
col44,
'Some Other Value',
col46,
col47,
col48,
col49,
col50
FROM myschema.mytbl
WHERE col5 = 'Some Value';
Сколько накладных расходов создает создание / удаление временной таблицы? Если, например, это было частью ежедневного процесса в системе промышленного размера, будут ли заметны дополнительные издержки? Я понимаю, что многое зависит от специфики системы, но общая идея была бы фантастической.