我有file.sql
包含20,000
插入命令
来自.sql
文件的示例
插入
table
VALUES (1,-400,400,3,154850,'文本',590628,' TEXT' 1610,' TEXT' 79);插入
table
VALUES (39,-362,400,3,111659,'文本',74896,' TEXT',0,' TEXT' 14);
我正在使用以下代码创建一个内存中的Sqlite数据库并将值拉入其中然后计算已用时间
using (var conn = new SQLiteConnection(@"Data Source=:memory:"))
{
conn.Open();
var stopwatch = new Stopwatch();
stopwatch.Start();
using (var cmd = new SQLiteCommand(conn))
{
using (var transaction = conn.BeginTransaction())
{
cmd.CommandText = File.ReadAllText(@"file.sql");
cmd.ExecuteNonQuery();
transaction.Commit();
}
}
var timeelapsed = stopwatch.Elapsed.TotalSeconds <= 60
? stopwatch.Elapsed.TotalSeconds + " seconds"
: Math.Round(stopwatch.Elapsed.TotalSeconds/60) + " minutes";
MessageBox.Show(string.Format("Time elapsed {0}", timeelapsed));
conn.Close();
}
我尝试过的事情
SQLite Manager
扩展来测试是否。{
减慢问题来自剧本;但是,我很惊讶
我尝试使用我的代码处理相同的20,000
行
已经在4月4日被拉到了数据库!!!。PRAGMA synchronous = OFF
,以及PRAGMA journal_mode =
MEMORY
。begin transaction;
和commit transaction;
附加到
分别是.sql
文件的开头和结尾。正如SQLite文档所述:SQLite能够每秒处理50,000
个命令。这是真实的,我使用SQLite Manager
确定了它[在我认可的第三个中描述];但是,我在4分钟内完成了20,000
命令,这些命令表明存在错误。
问题:我面临的问题是什么执行非常缓慢?!
答案 0 :(得分:0)
SQLite.Net文档建议使用以下事务构造
using (SqliteConnection conn = new SqliteConnection(@"Data Source=:memory:"))
{
conn.Open();
using(SqliteTransaction trans = conn.BeginTransaction())
{
using (SqliteCommand cmd = new SQLiteCommand(conn))
{
cmd.CommandText = File.ReadAllText(@"file.sql");
cmd.ExecuteNonQuery();
}
trans.Commit();
}
con.Close();
}
答案 1 :(得分:0)
您是否能够将文本文件上下文操作为:
INSERT INTO table (col01, col02, col03, col04, col05, col06, col07, col08, col09, col10, col11)
SELECT 1,-400,400,3,154850,'Text',590628,'TEXT',1610,'TEXT',79
UNION ALL
SELECT 39,-362,400,3,111659,'Text',74896,'TEXT',0,'TEXT',14
;
也许尝试将它们“批处理”成100个组作为初始测试。
http://sqlite.org/lang_select.html
SqlLite似乎支持UNION ALL语句。