Мне нужно обновить около 2,5 миллионов строк в таблице mysql. Я попытался сделать это в цикле for, но для выполнения этого требуется несколько часов. Столбец id
является первичным ключом.Ускорить большой набор запросов на обновление mysql
Как я могу ускорить это?
Мои Python (с пандами dataframe) Код:
dataframe = to_update_rows_dataframe
for i,row in dataframe.iterrows():
sql = "UPDATE table SET `val1` = %.4f , `val2` = %.6f WHERE `id` = %d;" % (row['val1'], row['val2'], row['id'])
cursor.execute(sql)
db.commit()
Благодаря
EDIT:
dataframe = to_update_rows
string_list_val1 = []
string_list_val2 = []
id_list = dataframe['id'].tolist()
for i,row in dataframe.iterrows():
string_list_val1.append('when %d THEN %.4f' % (row['id'], row['val1']))
string_list_val2.append('when %d THEN %.6f' % (row['id'], row['val2']))
s1 = ' '.join(string_list_val1)
s2 = ' '.join(string_list_val2)
s3 = ','.join(map(str,id_list))
query = "UPDATE table SET `val1` = (CASE id %s ELSE `val1` END), `val2` = (CASE id %s ELSE `val2` END) WHERE id IN(%s);" % (s1,s2,s3)
cursor.execute(query)
db.commit()
Однако построение этой строки запроса еще занимает много времени, чтобы построить.
Есть ли способ ускорить цикл for для строки?
Я читал: http://waymoot.org/home/python_string/ Я допустил ошибку при реализации метода 4?
Другой вопрос: что произойдет, если запрос слишком велик?
т. Е. Тайм-аут phpmyadmin/mysql. Максимальное количество строк? могут ли быть вставки в таблице во время выполнения запроса?
Благодаря
Вы должны использовать SQL массового обновление для этого вместо для петли – Stasel
@Stasel, спасибо за ваш вклад. Я обновил вопрос, возможно, вы можете посмотреть на мои другие вопросы? – user3605780