2016-08-11 3 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, вы можете выполнить полное сканирование индекса (избегая полного сканирования «таблицы»). Разница между этими двумя полными сканированиями - это время десериализации и считывание данных о количестве (полное сканирование индекса намного дешевле).

К сожалению, в текущей версии LiteDB у вас нет параметров, чтобы получить только индексный ключ. Это довольно просто реализовать, поэтому откройте проблему github, которая может быть реализована в следующей версии.

+0

Это именно то, что я хочу. Открытая проблема здесь: https://github.com/mbdavid/LiteDB/issues/269. Благодаря! – neolei