我在我的 c 应用程序中遇到大量 sqlite 减速问题,并且
不知道这是意料之中还是我没有正确使用 sqlite。
数据库使用滚动日志,如 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 秒。是
这是你所期望的? db 存储在 ext3 格式的 SD 卡上
这是一个因素吗?
最佳答案
当您使用 MAX(log_id)
,您要求数据库找到 log_id
的最大值在表中。如果该列上没有索引,则确定最大值的唯一方法是扫描整个表。
您可以将索引添加到 log_id
带有 SQL 命令的列,例如;
create unique index idx1 on table_name (log_id);
请注意,在一张特别大的 table 上,这可能需要一段时间。如果可以,请先在副本上尝试。
关于随着数据库的增长,SQLite 减速(滚动日志),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10343774/