2015-09-09 2 views
-2

Я обновляющий таблицу с миллионами записей с помощью простого запроса, но его принимая огромный timimg, интересно, если кто-то может принести некоторую магию альтернативу скорости ниже запрос процессазапрос Быстрое обновление на миллионы таблицы

UPDATE sources.product 
    SET partial=left(full,7); 
+2

Пробовал делать это в небольших кусках? Слишком большие транзакции могут замедлить работу. – jarlh

+0

Вы ничего не можете сделать, чтобы ускорить это. так или иначе, вам придется обновлять все строки, а разделение их на куски открывает возможность чего-то упустить. –

+1

Вы знаете, что этот запрос будет обновлять * каждую запись в вашей таблице, верно? –

ответ

1

Вам нужно сузить количество строк, чтобы ускорить их работу. Попробуйте несколько вещей:

  1. Сокращение числа индексов на partial колонке. Каждый индекс требует обновления при изменении partial, так что одно обновление может привести к 2 или 3 другим обновлениям.

  2. Отметьте ваши строки, чтобы вы только обновили новые.

  3. Создайте триггер для обновления partial, когда строка вставлена ​​или обновлена.

+0

таблица стабильна, никаких новых дополнений не будет, просто нужно добавить этот дополнительный атрибут (частично) на основе существующего (полный), также нет индекса на атрибуте partial в это время –

+0

Если это одноразовая работа просто возьмите удар и сделайте это. –

-1

Индексирование необходимо для таблицы, если оно содержит большие данные, я думаю, вы должны попробовать переиндексировать, а затем попробовать использовать эту команду.

+1

Индексы обычно делают обновления медленнее .... так как тогда он должен обновлять как базовую таблицу, так и индекс. Индексирует запросы скорости, а не обновления, если только это не индекс для ссылки на обновление. – RThomas

Смежные вопросы