2009-06-05 19 views
14

SQLiteは外部キーをネイティブに適用しないことを知っていますが、それは私の主な関心事ではありません。私はSQLiteでの外部キーの最適化

CREATE TABLE invoice (
    invoiceID INTEGER PRIMARY KEY, 
    clientID INTEGER REFERENCES client(clientID), 
    ... 
) 

は、クライアントIDが外国クエリを最適化するための鍵と自動的にインデックスinvoice.clientIDであることを少なくともSQLiteの情報を使用します宣言した場合、またはこの制約は、実際何もしません:質問はありますか?

答えて

24

実際にノーオペレーションでない場合(制約を記述するデータ構造がテーブルに追加されていても)、外部キー関連のステートメントは関連する列のインデックスを作成しません。 索引は、PRIMARY KEYおよびUNIQUE文の場合にのみ暗黙的に作成されます。詳細については 、sqliteのソースツリーにbuild.cモジュールを、それをチェックアウト:SQLite Documentationhttp://www.sqlite.org/cvstrac/rlog?f=sqlite/src/build.c

23

をそれは言う:

...「インデックスが子キー列に作成する必要がありますそれぞれの外来キー制約の「

ieです。インデックスは自動的には作成されませんが、すべてのインスタンスにインデックスを作成する必要があります。

+0

ああ私は、彼らが明示的に今言及しているのを見ます。ありがとう! – balpha