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

When is the Index attribute used on a Sqlite.Net class?

我正在使用 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 属性有什么用,我需要它吗?

but when querying the tables it will surely be up to the Sqlite engine to determine the indexes

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

所以外键上的[Indexed]属性是一个适当的手动优化。