2012-04-27 46 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); 

请注意,在特别大的桌子上这可能需要一段时间。如果可以,请先在副本上尝试。