У меня есть большая таблица (около 40M строк), где у меня было несколько столбцов, которые равны 0, которые должны быть нулевыми, чтобы мы могли лучше использовать данные.Перемещение больших объемов данных вместо их обновления
Я написал сценарии, чтобы посмотреть нарезание обновления на куски 10000 записей, найти столбец с нулем и обновить их до нуля.
Пример:
update FooTable
set order_id = case when order_id = 0 then null else order_id end,
person_id = case when person_id = 0 then null else person_id end
WHERE person_id = 0
OR order_id = 0
Это прекрасно работает, но он принимает навсегда.
Я думаю, что лучший способ сделать это - создать вторую таблицу и вставить в нее данные, а затем переименовать ее, чтобы заменить старую таблицу столбцами, имеющими нуль.
Вопрос: могу ли я сделать вставку в таблицу2, выбрать из таблицы1, и в процессе очистить данные из таблицы1 до ее входа?
Попробуй и посмотри? – Malk
Какие индексы вы создали на 'FooTable'? Вы рассматривали разделение SQL на два SQL (один для 'WHERE person_id = 0', а другой для' WHERE order_id = 0')? Вы посмотрели планы исполнения? –