我知道SQLite本身并不强制执行外键,但这不是我主要关注的问题.问题是:如果我宣布
CREATE TABLE invoice ( invoiceID INTEGER PRIMARY KEY, clientID INTEGER REFERENCES client(clientID), ... )
sqlite至少会使用clientID是外键的信息来优化查询并自动索引invoice.clientID,还是这个约束是真正的无操作?
即使它实际上不是no-op(描述约束的数据结构被添加到表中),外键相关语句也不会在涉及的列上创建任何索引.仅在PRIMARY KEY和UNIQUE语句的情况下隐式创建索引.有关更多详细信息,请在sqlite源代码树上查看build.c模块:http://www.sqlite.org/cvstrac/rlog?f = sysite/src/build.c
在SQLite文档中,它说:
..."应在每个外键约束的子键列上创建索引"
即.索引不会自动创建,但您应该在每个实例中创建一个.