2016-09-28 14 views
0

私はSqlite.Netを使用してモバイルアプリケーションを構築していますが、Indexedという属性があります。これは、ここでの例で示されています:https://github.com/praeclarum/sqlite-net#example-timeインデックス属性はいつSqlite.Netクラスで使用されますか?

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属性が使用されていて、必要なのですか?

答えて

2

が、テーブルを照会するとき、それは確かにインデックス

いいえ、インデックスが事前に定義されるようにして挿入、更新、削除に維持されてい

を決定するためにSqliteをエンジンまでとなります。クエリが実行されると、エンジンは使用するインデックスを決定するか、無視しますが作成しません。

したがって、外部キーの[Indexed]属性は適切な手動最適化です。

+0

'Index'属性を定義せずに' Valuation'テーブルに新しい行を挿入すると、 'index'がSqliteデータベースで更新されないということはありますか? – user1

+0

属性がないと、更新するインデックスがありません。 –

関連する問題