我的CSV文件中有300万个数据。我想在10-15分钟内将这些批量数据插入到SQLite数据库中。通常使用以下代码需要20分钟。
我的样本:
SQLiteConnection con = new SQLiteConnection("Data Source="D:\\SQLiteData.db;Version=3;New=False;Compress=True;");
if (!File.Exists("D:\\SQLiteData.db"))
{
SQLiteConnection.CreateFile("D:\\SQLiteData.db");
}
con.Open();
SQLiteCommand com = con.CreateCommand();
com.Transaction = con.BeginTransaction();
com.CommandText = "CREATE TABLE Sample([ELEMENT_ID] real,[DATE] datetime,[COMMENT] real);"
com.ExecuteNonQuery();
com.CommandText = "INSERT INTO [Sample] VALUES(@C0,@C1,@C2)";
using (var fileStream = new FileStream("E:\\comma.csv", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (StreamReader streamReader = new StreamReader(fileStream))
{
using (CsvReader reader = new CsvReader(streamReader))
{
reader.ValueSeparator =’,’;
reader.ReadHeaderRecord();
while (reader.HasMoreRecords)
{
DataRecord record = reader.ReadDataRecord();
com.Parameters.Clear();
for (int i = 0; i < reader.HeaderRecord.Count; i++)
{
com.Parameters.AddWithValue("@c" + i, string.Empty);
}
com.ExecuteNonQuery();
}
}
}
有人可以建议我在更短的时间内将批量CSV数据移动到SQLite中吗?
答案 0 :(得分:0)
执行一次巨大的插入导致单个 ExecuteNonQuery() 和单个事务应该提高性能。您也可以尝试通过 processInfo 导入 csv。