提高SQLite性能

Rom*_*key 5 c# sql sqlite

好吧,我有一个file.sql包含20,000插入命令

样本来自.sql文件

插入table值(1,-400,400,3,154850,'Text',590628,'TEXT',1610,'TEXT',79);

INSERT INTO tableVALUES(39,-362,400,3,111659,'Text',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();
}
Run Code Online (Sandbox Code Playgroud)

我尝试过的事情

  1. 使用文件数据库而不是内存数据库.
  2. 使用begin transaction和commit transaction [在我的代码中显示].
  3. 使用Firefox的扩展命名SQLite Manager来测试减速问题是否来自脚本; 但是,我感到惊讶的是20,000,我尝试使用我的代码处理的相同行已经在4月4日被拉到了数据库!
  4. 使用PRAGMA synchronous = OFF,以及PRAGMA journal_mode = MEMORY.
  5. 追加begin transaction;commit transaction;在开始和结束的.sql分别文件.

正如SQLite文档所说:SQLite能够50,000每秒处理命令.这是真实的,我确定它使用SQLite Manager[在我被试过的第三个描述中描述]; 但是,我20,000在4分钟内完成了我的命令,这些事情表明存在错误.

问题:我面临的问题是什么执行非常缓慢?

zeF*_*chy 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();
}
Run Code Online (Sandbox Code Playgroud)