2009-06-05 71 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