何时在Sqlite.Net类上使用Index属性?

时间:2016-09-28 10:18:31

标签: c# sqlite indexing sqlite.net

我正在使用Sqlite.Net构建移动应用程序,但我遇到了Indexed属性。这在以下示例中显示:https://github.com/praeclarum/sqlite-net#example-time

public class Stock
{
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }
    [MaxLength(8)]
    public string Symbol { get; set; }
}

public class Valuation
{
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }
    [Indexed]
    public int StockId { get; set; }
    public DateTime Time { get; set; }
    public decimal Price { get; set; }
}

正如您所看到的,StockId列标记为Indexed,但在查询表时,肯定会由Sqlite引擎决定索引并优化查询。

所以我的问题是Indexed属性用于什么,我需要它吗?

1 个答案:

答案 0 :(得分:2)

  

但是在查询表时,肯定会由Sqlite引擎来确定索引

不,索引必须预先定义,并使用插入,更新和删除进行维护。当查询运行时,引擎可以决定使用或忽略哪些索引但不创建索引。

因此外键上的[Indexed]属性是适当的手动优化。