2

C アプリケーションで sqlite が大幅に遅くなるという問題があり、それが予想されることなのか、それとも sqlite を正しく使用していないのかわかりません。データベースは、ここで説明されているようなローリング ログを使用しますhttp://dt.deviantart.com/journal/Build-Your-Own-Circular-Log-with-MySQL-222550965

書き込み対象のテーブルには約 170 の float 列があり、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>)

挿入時間は、行数に比例して増加するようです。最初の挿入にかかる時間は 1 秒未満ですが、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 に答える