0
我一直在創建一個包含Sqlite和QT的85000記錄的字典文件。 sqlite的文件太大了,它是134MB,而像MDic DB這樣的另一個字典與sqlite創建的數據相同,並且相同的記錄是10 MB!Sqlite數據庫文件太大....?
query.exec("PRAGMA journal_mode = MEMORY");
query.exec("PRAGMA synchronous = OFF");
Dic_entry DictionaryEntry = DictionaryInstance.readEntry();
QString definition, headword, displayedHeadWord;
query.exec("BEGIN Transaction");
int Count = 0;
while(!DictionaryEntry.headword.empty())
{
definition = QString::fromStdString(DictionaryEntry.definition);
definition.replace("'", "''");
headword = QString::fromStdString(DictionaryEntry.headword);
headword.replace("'", "''");
displayedHeadWord = QString::fromStdString(DictionaryEntry.displayedHeadword);
displayedHeadWord.replace("'", "''");
string strQuery = "INSERT INTO Dictionary_Words([Definition], [HeadWord], [DisplayedHeadWord]) "
"values('"
+ definition.toStdString() + "', '"
+ headword.toStdString() + "', '"
+ displayedHeadWord.toStdString()
+ "')";
query.exec(QString::fromStdString(strQuery));
if(Count == 200)
{
query.exec("COMMIT TRANSACTION");
Count = 0;
}
Count++;
DictionaryEntry = DictionaryInstance.readEntry();
}
query.exec("End Transaction");
query.exec("CREATE INDEX HW_idx ON [Dictionary_Words](HeadWord)");
query.exec("CREATE INDEX Def_idx ON [Dictionary_Words](Definition)");
query.exec("CREATE INDEX DHW_idx ON [Dictionary_Words](DisplayedHeadword)");
query.exec("PRAGMA auto_vacuum=FULL");
db.close();
請幫助我,我怎樣才能減少我SQlite的數據庫文件
爲什麼你的代碼在我的屏幕中間? –
這是無可爭議的,但SQLite有一個數據綁定API,允許您應用數據,而不必不斷創建「INSERT INTO」語句並在循環中執行它們。這也意味着你不必清理你的輸入;因爲綁定到這些參數的字符串不會干擾SQL語句的邏輯。你應該考慮這樣做;它節省了大量時間和精力(儘管它與最終的文件大小無關)。 –
我以前用過SQLite,我從來沒有見過佔用這麼多空間。我的音樂數據庫包含6000多首歌曲,它只需要20MB左右。那裏有多個表格,包括各種藝術家數據等,以及觸發器,常見視圖等。您確定您顯示的代碼是存儲在數據庫中的_only_數據嗎? –