2009-06-05 60 views
14

我知道SQLite本身并不强制外键,但那不是我最关心的问题。现在的问题是:如果我宣布SQLite中的外键优化

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

将SQLite的至少使用信息clientID的是一个外键优化查询和自动索引invoice.clientID,或者是这种限制真正的无操作?

回答

24

即使它实际上不是一个无操作(描述约束的数据结构添加到表中),与外键相关的语句也不会在涉及的列上创建任何索引。 只有在PRIMARY KEY和UNIQUE语句的情况下才会隐式创建索引。 有关详细信息,检查出来build.c模块上的SQLite的源代码树: http://www.sqlite.org/cvstrac/rlog?f=sqlite/src/build.c

23

SQLite Documentation它说:

...“的指数应在子键列创建的每个外键约束“

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

+0

啊我明白了,他们现在明确提到它。谢谢! – balpha 2011-06-08 19:17:42