【发布时间】:2012-09-24 20:29:48
【问题描述】:
我有一个本地 SQLite 数据库
表格详情
-- 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)
)
现在这个列表真的很大,我需要从中保存数据。
这是我的实现。
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);
我需要一些更好的方法来更快地保存列表。 VALID_LIST 中的总条目数为 2639117
为上面的 SQL QUERY 保存花了 15 分钟!
如果sql查询可以优化,请lmk!
提前致谢
【问题讨论】:
-
相关子查询 +
LIKE= 巨大的性能冲击 -
@cdhowie - 我知道,但还有什么其他解决方案?我认为查询必须以某种方式进行优化!
-
我认为没有一种简单的方法可以在不完全改变您的架构的情况下对其进行优化。
-
@cdhowie - 改变架构不是问题!我刚刚开始申请,我希望这三个列表都会变得更大!
-
您能否提供一些示例数据,以及您希望从查询中得到什么结果?
标签: c# database sqlite query-optimization