Ich habe eine SQLite-Datenbank mit rund 22 Millionen Datensätzen. Ich habe Indizes für die rechten Spalten (in den "Where" -Spalten) Wenn ich eine Abfrage (die ungefähr 80.000 Zeilen zurückgibt) mit sqlitestudio (einem SQLite-Editor) mache, dauert die Abfrage etwa eine Sekunde. Aber ich vermute, dass dies auf irgendeine Art von Seitenumbruch zurückzuführen ist.Wie beschleunigt man den Datenzugriff?
Allerdings .. wenn ich die gleiche Abfrage in C# mit system.sqlite.data ausführen, dauert es sehr lange, diese 80.000 Datensätze zu durchlaufen.
Gibt es eine Möglichkeit, dies zu beschleunigen? Sollte ich vielleicht einen Wrapper auf die sqlite.dll selbst schreiben?
Ich überprüfte den Ausführungsplan und es ist das gleiche in SQLite Studio und in der C# -Code. Similar issue
Während vermutete Antworten geschätzt werden und einen Einblick bieten können (und manchmal auch eine Antwort) Ich würde konkrete Antworten zu schätzen wissen (dh diejenigen, die Sie wissen, dass tatsächlich funktioniert)
Heres der Code ...
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())
{
}
}
}
Edit 1:
ich die gleiche Abfrage mit sqlite3.exe ausgeführt haben (das Kommandozeilen-Programm ein von sqlite.org herunterladen können) ein nd sein Ausgang wird zum Konsolenfenster gehen. Es dauert eine lange Zeit, um alle Datensätze durchzulaufen und es in das Befehlsfenster zu drucken .. aber erinnern Sie sich ... sein DRUCKEN an das BEFEHLSFENSTER ...
Keine Ahnung, was war ich - aber .. dauert es 1-2 Minuten pro Schleife? das scheint unglaublich langsam, was passiert, wenn (aus Mangel an etwas besser zu tun), wie Sie es in der Schleife versteckt haben Sie einfach die Daten aus Ihrem Leser und schreiben Sie einfach das rohe Objekt auf lokale Festplatte .. so nichts Optimiert es, dauert es noch so lange? – BugFinder
So lange dauert es, bis das gesamte Ergebnis durchgeschleift wird, selbst wenn NICHTS in der Schleife ist. Das ist der Teil, der mich verrückt macht. Aber selbst mit dem Code in (einfache Zuweisung von Klasseneigenschaften aus Spalten) dauert es immer noch so lange. Glauben Sie, dass ein Index zu den Ergebnisspalten hilft? – Eminem
Eine kleine Änderung an meinem Code-Kommentar gemacht – Eminem