Ich habe eine lokale SQLite-DatenbankSQLite - Schnellste Möglichkeit zum Lesen von Daten aus der SQLite-Datenbank?
TABELLE DETAILS
-- Describe PREFIX_LIST
CREATE TABLE PREFIX_LIST(ITEM VARCHAR(25) PRIMARY KEY)
-- Describe SUFFIX_LIST
CREATE TABLE SUFFIX_LIST(ITEM VARCHAR(25) PRIMARY KEY)
-- Describe VALID_LIST
CREATE TABLE VALID_LIST (
"PART1" TEXT,
"PART2" TEXT,
PRIMARY KEY(PART1, PART2)
)
jetzt ist diese Liste wirklich riesig, und ich brauche, müssen Daten von ihm zu speichern.
Hier ist meine Implementierung.
SQLiteConnection con = null;
SQLiteCommand cmd = null;
Connect(DbPath, ref con, ref cmd);
cmd.CommandText =
"SELECT PART1 || '@' || PART2 FROM VALID_LIST
WHERE NOT EXISTS
(SELECT * FROM PREFIX_LIST WHERE VALID_LIST.PART1 LIKE '%' || ITEM || '%')
AND NOT EXISTS
(SELECT * FROM SUFFIX_LIST WHERE VALID_LIST.PART2 LIKE '%' || ITEM || '%')";
var reader = cmd.ExecuteReader();
if (reader.HasRows)
{
string savePath;
if (SaveTextFile(out savePath) == DialogResult.OK)
{
TextWriter writer = new StreamWriter(savePath);
while (reader.Read())
{
writer.WriteLine(reader.GetString(0));
}
writer.Close();
writer.Dispose();
}
}
reader.Close();
reader.Dispose();
cmd.Dispose();
con.Close();
con.Dispose();
MessageBox.Show("List Saved!.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information);
Ich brauche eine bessere Möglichkeit, ich kann Liste schneller speichern. Gesamt Einträge in VALID_LIST ist 2639117
und es dauerte 15 Minuten, um es für die obige SQL-Abfrage zu speichern!
bitte LMK, wenn die SQL-Abfrage optimiert werden kann!
Vielen Dank im Voraus
Correlated Subquery + 'LIKE' = enorme Performance-Hit – cdhowie
@cdhowie - ich weiß, aber was sind andere Lösung? Ich denke, Abfrage muss irgendwie optimiert werden! –
Ich glaube nicht, dass es eine einfache Möglichkeit gibt, dies zu optimieren, ohne Ihr Schema vollständig zu ändern. – cdhowie