我的c应用程序中存在大量sqlite减速问题 不知道是否是预期的,或者我没有正确使用sqlite。 db使用滚动日志,如此处所述http://dt.deviantart.com/journal/Build-Your-Own-Circular-Log-with-MySQL-222550965。
正在写入的表有大约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卡上 这是一个因素吗?
答案 0 :(得分:1)
当您使用MAX(log_id)
时,您要求数据库在表中找到log_id
的最大值。如果该列上没有索引,则确定最大值的唯一方法是扫描整个表。
您可以使用SQL命令(
)向log_id
列添加索引
create unique index idx1 on table_name (log_id);
请注意,这可能需要一段时间才能放在特别大的桌子上。如果可以,请先在副本上试一试。