2009-06-05 9 views
14

Je sais que SQLite n'applique pas les clés étrangères de manière native, mais ce n'est pas ma principale préoccupation. La question est: Si je déclareOptimisation de clé étrangère dans SQLite

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

sera SQLite au moins utiliser les informations clientID est une clé étrangère pour optimiser les requêtes et automatiquement invoice.clientID d'index, ou est cette contrainte un véritable no-op?

Répondre

24

Même s'il ne s'agit pas d'un no-op (une structure de données décrivant la contrainte est ajoutée à la table), l'instruction associée à la clé étrangère ne crée aucun index sur les colonnes impliquées. Les index sont créés implicitement uniquement dans le cas des instructions PRIMARY KEY et UNIQUE. Pour plus de détails, check it out module build.c sur l'arbre source SQLite: http://www.sqlite.org/cvstrac/rlog?f=sqlite/src/build.c

23

Dans le SQLite Documentation il est dit:

... « un index doit être créé sur les enfants colonnes clés de chaque contrainte de clé étrangère "

ie. l'index n'est pas créé automatiquement, mais vous devez en créer un dans chaque instance.

+0

Ah je vois, ils le mentionnent explicitement maintenant. Merci! – balpha

Questions connexes