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=tip

于 2009-06-05T10:43:14.287 回答
41

SQLite 文档中它说:

...“应在每个外键约束的子键列上创建索引”

IE。索引不会自动创建,但您应该在每个实例中创建一个。

于 2011-06-08T18:55:48.473 回答