2012-04-27 49 views
2

我遇到了一個問題,在我的c應用程序中存在大量的sqlite slowdowns,並且 不知道它是否被預期,或者我沒有正確使用sqlite。 db使用滾動日誌,就像這裏http://dt.deviantart.com/journal/Build-Your-Own-Circular-Log-with-MySQL-222550965所解釋的那樣。隨着數據庫增長(滾動日誌)SQLite放緩

正在寫入的表具有大約170個浮動列,並且設置爲在 之間翻轉200萬行。插入行的查詢如下所示:

INSERT OR REPLACE INTO table_name (row_id, <170 column names>) values ((SELECT 
COALESCE(MAX(log_id), 0) % max_rows + 1 FROM table_name AS t), <170 floats>) 

插入時間似乎隨着行數成線性增長。第一個 插入需要的時間少於一秒,而第60,000秒需要30秒。 這是你所期望的嗎?數據庫存儲在ext3格式化的SD卡上,這可能是一個因素嗎?

回答

1

當您使用MAX(log_id)時,您要求數據庫在表中查找最大值log_id。如果在該列上沒有索引,則可以確定最大值的唯一方法是掃描整個表。

您可以使用SQL命令將索引添加到log_id列中;

create unique index idx1 on table_name (log_id); 

請注意,在特別大的桌子上這可能需要一段時間。如果可以,請先在副本上嘗試。