Cuando una columna entera se marca como clave principal en una tabla SQLite, ¿también se debe crear un índice explícitamente para ella? SQLite no parece crear automáticamente un índice para una columna de clave principal, pero ¿quizás lo indexa de todos modos, dado su propósito? (Buscaré en esa columna todo el tiempo).
¿La situación sería diferente para una clave primaria de cadena?
fuente
sqlite_master
tabla con un nombre que comienza consqlite_autoindex_
.UNIQUE
índice (o unaUNIQUE
restricción) en los campos principales / referenciados si no existe; se recomienda que los campos secundarios / de referencia tengan un índice (que generalmente no será único): vea aquíSQL Data Constraints
aquí dice: En la mayoría de los casos , las restricciones ÚNICAS y PRINCIPALES se implementan creando un índice único en la base de datos. (Las excepciones son INTEGER PRIMARY KEY y PRIMARY KEYs en las tablas SIN ROWID). ¿Entonces la respuesta no siempre es cierta?Si una columna está marcada INTEGER PRIMARY KEY, en realidad es aproximadamente el doble de rápido que una búsqueda similar realizada al especificar cualquier otra PRIMARY KEY o valor indexado . Esto es porque:
Ver: http://www.sqlite.org/lang_createtable.html#rowid
fuente
Una base de datos siempre creará en silencio un índice para una clave primaria única para que pueda verificar internamente que sea única de manera eficiente.
Una vez creado, lo usará cuando sea necesario.
Por supuesto, no siempre estará agrupado, y usted especifica generalmente en el esquema si lo desea.
fuente