Для INSERT, пакетирование их с помощью длинного предложения VALUES (как показано по ссылке Саймона) является самым быстрым способом (если вы не хотите сгенерировать текстовый файл и загрузить его в свою базу данных с помощью MySQL LOAD DATA INFILE). Но вы должны быть очень осторожны с экранированием ваших текстовых значений (что не сделано в примере).
Я спрашивал "какую базу данных вы используете", потому что это имеет значение для массовых обновлений.
Например, вы можете сделать это на postgres (и я считаю, что SQL Server изменяет «columnX» на «colX»):
UPDATE foo
JOIN (VALUES (1,2),(3,4),... long list) v ON (foo.id=v.column1)
SET foo.bar = v.column2
И вы можете обновить загрузку строк с помощью одного оператора, очень быстро.
Если вам не требуется, чтобы Ruby выполнял какое-то специфическое для Ruby волшебство с вашими данными, самый быстрый способ перенести данные из одной БД в другую - это экспортировать в виде текстового файла (CSV или табуляция), загрузите его в другой БД (LOAD DATA INFILE на MySQL), возможно, во временной таблице, и массовый процесс с использованием SQL.
РЕДАКТИРОВАТЬ: Вот как я делаю это в Python:
sql = [ "INSERT INTO foo (column list) VALUES " ]
values = []
for tuple in tuple_list:
append "(?,?,?,?)" to sql
extend values list with tuple
Затем соедините sql в строку, и вы получите «INSERT INTO foo (список столбцов) VALUES (?,?,?,?), (?,?,?,?), (?,?,?,?) "с" (?,?,?,?) "повторяется столько раз, сколько строк нужно вставить.
Тогда «values» содержит список (a1, b1, c1, d1, a2, b2, c2, d2, a3, b3, c3, d3) с a, bn, cn, dn, которые вы хотите вставить для строки n. Каждый соответствует заполнителю в строке sql.
Затем передайте это обычной функции «выполнить запрос с параметрами», которая будет обрабатывать кавычки и экранирование как обычно.