32

SQLite が外部キーをネイティブに強制しないことは知っていますが、それは私の主な関心事ではありません。問題は次のとおりです。

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

sqlite は、少なくとも clientID が外部キーであるという情報を使用して、クエリを最適化し、invoice.clientID を自動的にインデックス化しますか、それともこの制約は実際にはノーオペレーションですか?

4

2 に答える 2

42

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

于 2009-06-05T10:43:14.287 に答える
41

SQLite のドキュメントには次のように書かれています。

... 「各外部キー制約の子キー列にインデックスを作成する必要があります」

すなわち。インデックスは自動的に作成されませんが、インスタンスごとに作成する必要があります。

于 2011-06-08T18:55:48.473 に答える