2009-06-05 14 views
14

Ich weiß, dass SQLite native Fremdschlüssel nicht erzwingt, aber das ist nicht meine Hauptsorge. Die Frage ist: Wenn ichFremdschlüssel-Optimierung in SQLite

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

erkläre zumindest die Informationen verwenden, sqlite, dass clientID ein Fremdschlüssel ist Abfragen zu optimieren und automatisch Index invoice.clientID, oder ist diese Einschränkung ein echter No-Op?

Antwort

24

Auch wenn es kein No-Op ist (eine Datenstruktur, die die Einschränkung beschreibt, wird der Tabelle hinzugefügt), erzeugt die Fremdschlüssel-bezogene Anweisung keinen Index für die betroffenen Spalten. Indizes werden implizit nur bei PRIMARY KEY- und UNIQUE-Anweisungen erstellt. Für weitere Informationen, check it out build.c Modul auf dem SQLite-Quellbaum: http://www.sqlite.org/cvstrac/rlog?f=sqlite/src/build.c

23

Im SQLite Documentation heißt es:

... „ein Index für die untergeordneten Schlüsselspalten erstellt werden soll jeder Fremdschlüsselbeschränkung "

dh. Der Index wird nicht automatisch erstellt, Sie sollten jedoch in jedem Fall einen Index erstellen.

+0

Ah ich sehe, sie erwähnen es jetzt explizit. Vielen Dank! – balpha