2016-08-11 2 views
1

を参照してくださいコード:LiteDBで完全なテーブルスキャンを避けますか?

var lines = new List<PosLine>(){ 
    new PosLine{Name="John", Address="dummy1", Tstamp=DateTime.Now}, 
    new PosLine{Name="Jane", Address="dummy2", Tstamp=DateTime.Now} 
}; 

using(var db = new LiteDatabase(@"test.db")) 
{ 
    var posLines = db.GetCollection<PosLine>("POS"); 
    foreach(var line in lines) 
    { 
     var id = posLines.Insert(line); 
     Console.WriteLine("id=" + id.ToString()); 
    } 

    var names = posLines.FindAll().Select(p => p.Name).ToList(); 
    foreach(var name in names) 
    { 
     Console.WriteLine("name=" + name); 
    } 
} 

「名前」の一覧を取得しようとしますが、この場合には、それが全表スキャンですvar names = posLines.FindAll().Select(p => p.Name).ToList();ライン。 「名前」プロパティでインデックスを作成してから、そのインデックスからすべての名前をフェッチするような、フルテーブルスキャンを回避する方法はありますか?

答えて

0

すべてのドキュメントを読んでいるなら、完全スキャンは避けてください。 Nameでインデックスを使用すると、完全なインデックススキャンを実行できます(完全な "テーブル"スキャンを避ける)。この2つのフルスキャンの間の違いは、逆シリアル化時間とデータ読み込み量(インデックスフルスキャンははるかに安い)です。

現在のバージョンのLiteDBでは、インデックスキーのみを取得するオプションはありません。それを実装するのはかなり簡単ですので、次のバージョンで実装できるgithubに関する問題を開いてください。

+0

これはまさに私が欲しいものです。ここに問題がオープンしました:https://github.com/mbdavid/LiteDB/issues/269。ありがとう! – neolei

関連する問題