Имеется DataTable с данными.
Как можно быстро залить большой объем данных в MySql?
На офф сайте нашел совет, что для увеличения скорости загрузки делаем
INSERT INTO ... VALUES (),()
Это единственный способ?
Достаточно шустрая штука получилась. Очень быстро идет вставка, если генерить VALUES (),()...
public void Append(DataTable dt, string dataBaseName, DbSchema dbSchema)
{
PreCheckDestinationDb(dt, dataBaseName, dbSchema);
var cmd = GetBulkInsertQuery(dt);
var sb = new StringBuilder();
int counter = 0;
int total = 0;
for (var index = 0; index < dt.Rows.Count; index++)
{
DataRow row = dt.Rows[index];
AppendInsertValues(row, sb);
counter++;
if (counter >= _insertBatchSize || index + 1 == dt.Rows.Count)
{
_conn.Execute(cmd + sb);
sb.Clear();
total += counter;
log.Debug($"Вставлено: {total}/{dt.Rows.Count}");
counter = 0;
}
}
}
public void AppendInsertValues(DataRow row, StringBuilder sb)
{
if (sb.Length != 0)
{
sb.Append(",");
}
sb.Append("(");
for (var index = 0; index < row.Table.Columns.Count; index++)
{
DataColumn column = row.Table.Columns[index];
sb.Append(DBNull.Value.Equals(row[column]) ? "NULL" : $"'{MySqlHelper.EscapeString(row[column].ToString())}'");
if (index + 1 != row.Table.Columns.Count)
{
sb.Append(",");
}
}
sb.Append(")");
}
string GetBulkInsertQuery(DataTable dt)
{
var fieldList = dt.Columns.Cast<DataColumn>().Select(x => x.ColumnName).ToList();
var cmd = $"INSERT INTO `{dt.TableName}` (";
foreach (var field in fieldList)
{
cmd += $"`{field}`,";
}
cmd = cmd.Remove(cmd.Length - 1) + ") VALUES";
return cmd;
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Собственно, вопрос в заголовкеОкно не отрисовывается до тех пор, пока скрипт не будет выполнен
Имеется папка с картинками, пути к ним вручную вносятся в массив и затем используютсяЕсть ли вариант заполнить массив изображениями средствами...