2009-06-05 5 views
14

So che SQLite non applica le chiavi esterne in modo nativo, ma non è la mia preoccupazione principale. La domanda è: se io dichiaroOttimizzazione chiave esterna in SQLite

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

sarà SQLite almeno utilizzare le informazioni IDcliente è una chiave esterna per ottimizzare le query e automaticamente indice di invoice.clientID, o si tratta di un vero e proprio vincolo no-op?

risposta

24

Anche se in realtà non è un no-op (una struttura di dati che descrive il vincolo è stato aggiunto alla tabella), l'istruzione relativa alla chiave esterna non crea alcun indice sulle colonne coinvolte. Gli indici vengono creati in modo implicito solo nel caso delle istruzioni PRIMARY KEY e UNIQUE. Per maggiori dettagli, check it out modulo build.c sull'albero di origine sqlite: http://www.sqlite.org/cvstrac/rlog?f=sqlite/src/build.c

23

Nel SQLite Documentation si dice:

... "un indice dovrebbe essere creato sulle colonne chiave bambino di ciascun vincolo di chiave esterna "

ie. l'indice non viene creato automaticamente, ma è necessario crearne uno in ogni istanza.

+0

Ah, vedo, lo menzionano esplicitamente ora. Grazie! – balpha