私は約2200万レコードのsqliteデータベースを持っています。私は右の列( "where"列)にインデックスを持っています。sqlitestudio(sqliteエディタ)を使用してクエリを実行すると(約80,000行を返します)、クエリの実行に約2秒かかります。しかし、私はこれが何らかの形式のページネーションによるものだと考えています。データアクセスを高速化するにはどうすればよいですか?
しかし、C#でsystem.sqlite.dataを使用して同じクエリを実行すると、その80,000レコードを繰り返し処理するのに時間がかかります。
これをスピードアップする方法はありますか?おそらく、sqlite.dll自体にラッパーを書くべきでしょうか?
sqlitestudioとc#コードで実行計画とその実行計画を確認しました。 Similar issue
ている間は...答えが高く評価され、洞察(そして時には答え)私は(つまり、もの、あなたが実際に動作していることを知っている)相続人
コードを、具体的な答えを感謝を提供することができます推測
using (var command = new SQLiteCommand(conn))
{
command.CommandText = "select cell, lat, lon from cell_towers where mcc = @mcc and net = @net ";
command.Parameters.AddWithValue("@mcc", MCC);
command.Parameters.AddWithValue("@net", MNC);
using (SQLiteDataReader rdr = command.ExecuteReader())
{
// In here it takes around 1-2 minutes to loop through. Even with no code inside the loop
while (rdr.Read())
{
}
}
}
編集1:
私はsqlite3.exe(1がsqlite.orgからダウンロードすることができますコマンドラインプログラム)Aを使用して、同じクエリを実行しましたその出力はコンソールウィンドウに表示されます。すべてのレコードをループしてコマンドウィンドウに印刷するのに長い時間がかかりますが、覚えています...コマンドウィンドウへの印刷....
いいえ、考えられませんでしたが、ループごとに1〜2分かかりますか?ループの中で何をしているのかを隠してしまった場合には、読者からデータを取り出して、ローオブジェクトをローカルディスクに書き込むだけで、何が起こるのでしょうか?それを最適化する、それはまだそれを取るか? – BugFinder
ループ内でNOTHINGを指定しても、結果セット全体がループするのにどれくらいの時間がかかります。それは私のナットを運転している部分です。しかし、(列からのクラスプロパティの単純な割り当ての)コードでも、それはまだ長くかかります。結果列のインデックスが役立つと思われますか? – Eminem
私のコードのコメント – Eminem