1

私はデータベースを持っています。このデータベースには、「タイトル、アルバム、アーティスト...」などのフィールドを含むテーブルがあり、すべてのレコード(最大30)のhtmlコンテンツを含む多くのフィールドもあります。

問題は、このデータベースには数万のレコードがあり、htmlコンテンツのために数百メガバイトの大きさであるということです。sqliteファイルのサイズが原因で、検索は非常に遅くなります(また、トランザクションへの新しい要素の挿入は、200の新しい行に対して約10〜30秒非常に遅くなります)。最初のLIKEクエリには10〜15秒かかる場合があり、他の検索は十分に高速です(インデックスが作成され、正常に機能します)。データベースからhtmlコンテンツを削除したとき、検索は常に瞬時に行われました。

だから問題は、その追加のhtmlコンテンツを保存するための最良の方法は何ですか?今は別のファイルに保存するオプションを試してみましたが、将来的には最大600k以上のファイルを生成する可能性があり、作成に時間がかかります。ファイルをzipアーカイブに保存すると、ファイル数の制限に達する可能性があります。他のオプションは、テーブル行ごとにファイルを圧縮するか、同じデータベース内の別のテーブルにhtmlを保存するか、htmlコンテンツ用に別のデータベースファイルを作成することです。

何が私に最高のパフォーマンスを与えるでしょうか?または他のより良いオプションはありますか?クイック挿入、更新、検索が必要です。

4

2 に答える 2

0

あなたが行うことを検討できるいくつかの異なることがあります:

  • データを別々のテーブルに分割します。その後、テーブル間で 1:1 のマッピングを行い、必要な場合にのみそれらを結合して、テーブルなしでクエリを高速化できます。
  • インデックスを確認してください。あなたがそれらを持っていて、それらが機能していると思うからといって、それらが機能しているとは限りません. 私の記憶が正しければ、sqlite はクエリごとに最大で 1 つのインデックスを使用するため、使用しているクエリで利用できる最高のインデックスを使用できるようにする必要があります。ANALYZE コマンドはそれを助けることができます。
于 2012-08-08T13:16:45.437 に答える
0

数日間の実験の後、私はこの結論に達しました:

  • 1 つのテーブルを持つ 1 つのデータベース ファイルが最も遅かった (最大 10 秒)
  • 2 つのテーブルを持つ 1 つのデータベースは、最悪のシナリオでは 1 つのテーブルよりも 2 倍高速でした
  • 最も速いのは、2 つの別個のデータベース ファイルを持つことでした。1 つは検索に必要なデータ、もう 1 つは膨大な html データです。これは、最悪の場合でも約 300 ミリ秒であり、通常の使用では瞬時です。

したがって、このシナリオでは 2 つの別個のデータベース ファイルを使用することをお勧めします。誰かがより速く/より良い解決策を持っていない場合、私はこれを答えとして受け入れます.

于 2012-08-15T11:22:02.107 に答える