2013-05-23 3 views
7

Я должен выполнить ~ 6k запросов на обновление таблицы на sql (без спящего режима/JDBC). Запрос что-то вродеMysql Bulk Update

обновления Набора some_id = «значение1», где ID = «значение2»

Это занимает слишком много времени, чтобы выполнить все эти запросы. Есть ли способ улучшить производительность?

ответ

26

Создайте временную таблицу (содержащую только значения value1 и value2) и заполните ее массовым (т. Е. Вы можете сделать это с помощью одного оператора insert). Затем выполните обновление, используя соединение между существующей таблицей и временной таблицей.

Что-то вроде

INSERT INTO SomeTempTable(id, some_id) 
VALUES (1,2), (3,4), (5,6), ....... 


UPDATE A INNER JOIN SomeTempTable ON A.id = SomeTempTable.id SET A.some_id = SomeTempTable.some_id; 
+0

как быстрее это можно достичь по сравнению с прямым обновлением? – fanchyna

+0

Довольно немного быстрее из-за необходимости отправлять гораздо меньше операторов в базу данных. Если обновление основано на CSV-файле, то потенциально вставка может быть выполнена с использованием синтаксиса LOAD DATA INFILE ..... Если обновление основано на уникальном ключе, то потенциально все можно было бы сделать в инструкции INSERT, используя синтаксис ON DUPLICATE KEY UPDATE .... – Kickstart