Итак, что я делаю, это чтение большого количества данных из удаленной базы данных Nettezza и вставка их в другую удаленную базу данных Oracle. Для этого я использую драйвер ODBC. Проблема в том, что имеется много данных, и требуется слишком много времени. Как я могу ускориться? Вот что я делаю:Как ускорить вставку odbc
Сначала я создаю подключение и команду для вставки:
String connect = "Driver={Microsoft ODBC for Oracle};CONNECTSTRING=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myhost)(PORT=myprt))(CONNECT_DATA=(SERVICE_NAME=myname)));Uid=uid;Pwd=pass";
connection = new OdbcConnection(connect);
connection.Open();
String q = @"INSERT INTO TEST (id)
VALUES (?)";
myCommand = new OdbcCommand(q,connection);
Затем я прочитал данные из netteza:
String connect = "Driver={NetezzaSQL};servername=server;port=5480;database=db; username=user;password=pass;
string query = @"SELECT T2.LETO_MESEC, T1.*
FROM data T1
JOIN datga2 T2 ON T2.ID = T1.EFT_ID
WHERE T2.LETO_MESEC = '" + mesec + @"'";
using (OdbcConnection connection = new OdbcConnection(connect))
{
try
{
OdbcCommand command = new OdbcCommand(query, connection);
connection.Open();
OdbcDataReader reader = command.ExecuteReader();
int counter=0;
while (reader.Read())
{
int id_first = reader.GetInt32(5);
insertOracle(id_first);
}
}
catch (Exception e)
{
Console.WriteLine("ne dela" + e.ToString());
}
}
И, наконец, моя вставка:
public void insertOracle(int id_first)
{
try
{
myCommand.Parameters.Clear();
myCommand.Parameters.Add(new OdbcParameter("id", id_first));
myCommand.ExecuteNonQuery();
}
catch (Exception e)
{
Console.WriteLine("ne dela" + e.ToString());
}
}
Я заметил, что они фиксируются в каждой строке, поэтому, как удалить это и ускорить его. Сейчас это занимает около 10 минут для 20000 строк.
Вместо выполнения каждого запроса на вставку отдельно вы можете создать партию вставленных запросов, например (100) * (разделенных символом ';') *, а затем вставить их с помощью одного 'ExectuteNonQuery', вы можете сохранить все если вы хотите. – Habib
+1 для 'BEGIN TRANSACTION', [сделайте свои вставки],' COMMIT TRANSACTION' –
Может кто-нибудь, пожалуйста, разместите пример о том, как это сделать ??? – gabrjan