Lorsqu'une colonne entière est marquée comme clé primaire dans une table SQLite, un index doit-il également être explicitement créé pour elle? SQLite ne semble pas créer automatiquement un index pour une colonne de clé primaire, mais peut-être qu'il l'indexe quand même, étant donné son objectif? (Je chercherai sur cette colonne tout le temps).
La situation serait-elle différente pour une clé primaire de chaîne?
la source
sqlite_master
tableau avec un nom commençant parsqlite_autoindex_
.UNIQUE
index (ou uneUNIQUE
contrainte) sur le (s) champ (s) parent / référencé (s) s'il n'existe pas; il est recommandé que le (s) champ (s) enfant (s) de référence aient un index (qui ne sera généralement pas unique): voir iciSQL Data Constraints
ici dit: Dans la plupart des cas , les contraintes UNIQUE et PRIMARY KEY sont implémentées en créant un index unique dans la base de données. (Les exceptions sont INTEGER PRIMARY KEY et PRIMARY KEY sur les tables SANS ROWID.). La réponse n'est donc pas toujours vraie?Si une colonne est marquée INTEGER PRIMARY KEY, elle est en fait environ deux fois plus rapide qu'une recherche similaire effectuée en spécifiant toute autre PRIMARY KEY ou valeur indexée . Ceci est dû au fait:
Voir: http://www.sqlite.org/lang_createtable.html#rowid
la source
Une base de données crée toujours silencieusement un index pour une clé primaire unique afin de pouvoir vérifier en interne qu'elle est unique de manière efficace.
Après l'avoir créé, il l'utilisera si nécessaire.
Il ne sera bien sûr pas toujours mis en cluster et vous spécifiez généralement dans le schéma si vous le souhaitez.
la source