我知道 SQLite 本身并不强制执行外键,但这不是我最关心的问题。问题是:如果我声明
CREATE TABLE invoice (
invoiceID INTEGER PRIMARY KEY,
clientID INTEGER REFERENCES client(clientID),
...
)
sqlite至少会使用clientID是外键的信息来优化查询并自动索引invoice.clientID,还是这个约束是真正的无操作?
我知道 SQLite 本身并不强制执行外键,但这不是我最关心的问题。问题是:如果我声明
CREATE TABLE invoice (
invoiceID INTEGER PRIMARY KEY,
clientID INTEGER REFERENCES client(clientID),
...
)
sqlite至少会使用clientID是外键的信息来优化查询并自动索引invoice.clientID,还是这个约束是真正的无操作?
即使它实际上不是空操作(将描述约束的数据结构添加到表中),外键相关语句也不会在所涉及的列上创建任何索引。只有在 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