0

テーブルが 1 つしかない sqlite データベース (約 50,000 行) があり、Java と sqlitejdbc を使用して update-otherwise-insert 操作を繰り返し実行します (つまり、存在する場合は行を更新し、そうでない場合は新しい行を挿入しようとします)。私のテーブルは、「単語」列と「頻度」列があり、主キーがない単語頻度テーブルに似ています!

問題は、この update-otherwise-insert 操作を何十万回も実行し、平均して挿入または更新操作に 2 ミリ秒以上かかることです。挿入操作に 20 ミリ秒かかる場合もあります。また、テーブルには、挿入操作で「where」句を使用する列 (「単語」列) にインデックスがあることにも言及する必要があります。これにより、当然、挿入操作がより高価になります。

最初に、50,000 行のインデックス付きテーブルでの挿入操作の 2 ミリ秒が正常であり、見落としがないかどうかを確認したいと思います。その後、パフォーマンスを改善するための提案は大歓迎です。大量の挿入操作を実行する前にインデックスを削除し、後で再作成するのは良い方法だと思いましたが、同じ単語を持つ行が既に存在するかどうかを確認する必要があるため、ここでは実行できません。

「ハードウェアに依存する」や「コードの残りの部分に依存する」などについてはすべて知っていますが、平均的なPCで挿入操作にどれだけの時間がかかるかを理解できると思います。

4

1 に答える 1

0

問題を部分的に解決しました。これに対する答えに興味がある人は、このリンクが役に立ちます。要するに、sqlite ("pragma journal_mode=OFF") でジャーナル モードをオフにすると、挿入パフォーマンスが大幅に向上します (私の場合、以前の速度のほぼ 4 倍)。

通常の挿入速度は、2ms/操作よりもはるかに高速です。適切なプラグマ命令を使用し、トランザクションを最大限に活用するなどして、1 秒あたり数十万回の挿入操作に達する可能性があります。

于 2012-08-21T15:24:29.100 に答える