何时在 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]
属性是一个适当的手动优化。
我正在使用 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]
属性是一个适当的手动优化。