私はSQLite3を使用してメモリに制約のある環境で作業しています。
PRAGMAのキャッシュサイズを(たとえば)1MBに設定します。
2MBのデータと100Kbのインデックスデータがあると仮定します。
SQLiteは、データ自体に加えてメモリキャッシュにインデックスを保持しようとしますか(キャッシュに900Kbのデータを残します)?
そうでない場合、メモリの観点からインデックスにどのようにアクセスしますか?
ありがとう。
私はSQLite3を使用してメモリに制約のある環境で作業しています。
PRAGMAのキャッシュサイズを(たとえば)1MBに設定します。
2MBのデータと100Kbのインデックスデータがあると仮定します。
SQLiteは、データ自体に加えてメモリキャッシュにインデックスを保持しようとしますか(キャッシュに900Kbのデータを残します)?
そうでない場合、メモリの観点からインデックスにどのようにアクセスしますか?
ありがとう。
いいえ、インデックスはメモリキャッシュに無期限に保持されません。新しいデータが挿入、更新、または削除される場合、sqlite3は使用頻度の低いデータを解放するだけです。
実際、インデックスにはメモリ管理との共通点はほとんどありません。INSERT
またはごとUPDATE
に、sqlite3はデータを再配置します(HDまたはRAMのシステムによって異なります)。簡単に言うと、テーブルにアクセスしようとすると、テーブルはすでに順序付けられていると言えます。インデックスのないテーブルと比較して、必要なメモリはこれ以上ありません。