내가 로컬 SQLite 데이터베이스를SQLite - 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에서 총 항목은 2,639,117
이며 위의 SQL 쿼리에 대한 저장 15 분이 걸렸다!
SQL 쿼리를 최적화 할 수 있으면 알려주십시오! LIKE
와
상관 관계가있는 하위 쿼리 +'LIKE' = 거대한 실적이 – cdhowie
@cdhowie - 맞습니다.하지만 다른 해결책은 무엇입니까? 나는 쿼리가 어떻게 든 최적화되어야한다고 생각합니다! –
스키마를 완전히 변경하지 않고 이것을 최적화하는 쉬운 방법이 없다고 생각합니다. – cdhowie