primary not foreign create autoincrement sqlite indexing primary-key

not - sqlite primary key composite



¿Se necesita un índice para una clave principal en SQLite? (3)

Cuando una columna entera está marcada como clave principal en una tabla SQLite, ¿debería crearse explícitamente un índice para ella también? SQLite no parece crear automáticamente un índice para una columna de clave principal, pero tal vez lo indice de todos modos, dado su propósito. (Estaré buscando en esa columna todo el tiempo).

¿La situación sería diferente para una clave principal de cadena?


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:

... todas las filas dentro de las tablas de SQLite tienen una clave de enteros de 64 bits que identifica de manera única la fila dentro de su tabla ... Buscar un registro con un rowid específico, o para todos los registros con rowids dentro de un rango especificado es aproximadamente el doble rápido como una búsqueda similar realizada al especificar cualquier otra tecla PRIMARY KEY o valor indexado.

Con una excepción que se detalla a continuación, si una tabla rowid tiene una clave principal que consta de una sola columna y el tipo declarado de esa columna es "INTEGER" en cualquier combinación de mayúsculas y minúsculas, la columna se convierte en un alias para rowid.

Dicha columna se conoce generalmente como una "clave primaria entera". Una columna PRIMARY KEY solo se convierte en una clave primaria entera si el nombre del tipo declarado es exactamente "INTEGER". Otros nombres de tipo entero como "INT" o "BIGINT" o "SHORT INTEGER" o "UNSIGNED INTEGER" hacen que la columna de la clave principal se comporte como una columna de tabla ordinaria con afinidad entera y un índice único, no como un alias para rowid.

Ver: http://www.sqlite.org/lang_createtable.html#rowid


Una base de datos siempre creará silenciosamente un índice para una clave primaria única, de modo que pueda verificar internamente que sea única y eficiente.

Habiéndolo creado, lo usará cuando sea necesario.

Por supuesto, no siempre estará agrupado, y usted especifica generalmente en el esquema si así lo desea.


Lo hace por ti.

Dejando de lado las columnas INTEGER PRIMARY KEY, las restricciones UNIQUE y PRIMARY KEY se implementan creando un índice en la base de datos (de la misma forma que lo haría una instrucción "CREATE UNIQUE INDEX"). Tal índice se usa como cualquier otro índice en la base de datos para optimizar las consultas. Como resultado, a menudo no hay ventaja (pero una sobrecarga significativa) en la creación de un índice en un conjunto de columnas que ya están colectivamente sujetas a una restricción UNICA o PRIMARY KEY.