2

我在我的 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 秒。这是你所期望的吗?数据库存储在 ext3 格式的 SD 卡上,这可能是一个因素吗?

4

1 回答 1

1

当您使用 时MAX(log_id),您是在要求数据库在表中找到 的最大值log_id。如果该列上没有索引,则确定最大值的唯一方法是扫描整个表。

log_id您可以使用 SQL 命令向列添加索引,例如:

create unique index idx1 on table_name (log_id);

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

于 2012-04-27T02:50:11.893 回答