挿入コマンドfile.sql
が含まれている20,000
.sql
ファイルからのサンプル
INSERT INTO
table
VALUES(1、-400,400,3,154850、'Text'、590628、'TEXT'、1610、'TEXT'、79);INSERT INTO
table
VALUES(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();
}
私が試したこと
- メモリの代わりにファイルデータベースを使用する。
- トランザクションの開始とトランザクションのコミットを使用する[コードに表示]。
- 名前の付いたFirefoxの拡張機能を使用し
SQLite Manager
て、速度低下の問題がスクリプトに起因するかどうかをテストします。しかし、20,000
コードを使用して処理しようとしているのと同じ行が、わずか4ミリ秒でデータベースにプルされていることに驚きました!!!。 PRAGMA synchronous = OFF
、および、を使用しPRAGMA journal_mode = MEMORY
ます。- ファイルの先頭と末尾にそれぞれ追加し
begin transaction;
ますcommit transaction;
。.sql
SQLiteのドキュメントにあるように:SQLiteは50,000
1秒あたりのコマンドを処理できます。そしてそれは本当であり、私はSQLite Manager
[私が試した3番目の何かで説明されているように]を使用してそれを確認しました。しかし、20,000
何か問題があることを示す何かが4分でコマンドを完了しています。
質問:実行が非常に遅いのはなぜですか?!