我正在使用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
属性用于什么,我需要它吗?
答案 0 :(得分:2)
但是在查询表时,肯定会由Sqlite引擎来确定索引
不,索引必须预先定义,并使用插入,更新和删除进行维护。当查询运行时,引擎可以决定使用或忽略哪些索引但不创建索引。
因此外键上的[Indexed]
属性是适当的手动优化。