Cuando una columna de tipo entero está marcado como una clave principal en una tabla SQLite, que se debe a un índice creado explícitamente para que así? SQLite no aparece automáticamente crear un índice en una columna de clave principal, pero tal vez los índices de todos modos, dado su objetivo? (Voy a estar buscando en la columna todo el tiempo).

Sería la situación va a ser diferente para una cadena de clave principal?

3 Comentarios

  1. 136

    Lo hace para usted.

    ENTERO columnas de CLAVE PRINCIPAL a un lado, a la vez ÚNICO y CLAVE PRINCIPAL
    las restricciones son aplicadas por la creación de un índice en la base de datos (en
    de la misma manera como un «CREATE UNIQUE INDEX» declaración). Tal
    el índice se utiliza como cualquier otro índice en la base de datos para optimizar
    las consultas. Como resultado, a menudo no hay ventaja (pero significativo
    encima de la cabeza) en la creación de un índice en un conjunto de columnas que ya están
    colectivamente, sujeto a una restricción PRIMARY KEY o UNIQUE.

    • En efecto, se dice «El atributo de CLAVE PRINCIPAL normalmente se crea un índice ÚNICO en la columna o columnas que se especifica como la CLAVE PRINCIPAL». Sin embargo, ese índice no es visible en SQLite gestión de aplicaciones, por eso pregunté.
    • Es de mencionar que en el sqlite_master tabla con un nombre que comienza con sqlite_autoindex_.
    • Que significa que, a diferencia de mysql, en ocasiones es necesario agregar los índices cuando se crea claves foráneas. Es ?
    • Tarde, pero @NicolasZozol sí que necesita para crear una UNIQUE índice (o un UNIQUE restricción) de los padres/referencia(s) si no existe; es recomendado que el niño/referencia / los campo(s) tienen un índice (que normalmente no es la única): ver aquí
    • ¿por qué son las claves principales de enteros no indexadas?
    • Hmm, sección SQL Data Constraints aquí dice: En la mayoría de los casos, ÚNICO y restricciones de CLAVE PRINCIPAL se implementan mediante la creación de un índice único en la base de datos. (Las excepciones son INTEGER CLAVE PRIMARIA y Claves PRIMARIAS SIN ROWID tablas.). Así que la respuesta no es siempre verdadera?
    • Parece que rowid ES indexada, pero implementado de manera diferente sqlite.org/lang_createtable.html#rowid Los datos para rowid de las tablas se almacena como una estructura de Árbol B que contiene una entrada para cada fila de la tabla, utilizando el rowid valor de la clave…la Búsqueda de un registro específico, con una rowid …es de alrededor de dos veces más rápido que una búsqueda similar hecha por la especificación de cualquier otra CLAVE PRINCIPAL o indexadas valor.

  2. 12

    Si una columna está marcada INTEGER PRIMARY KEY, es en realidad alrededor de dos veces tan rápido como una búsqueda similar hecha por la especificación de cualquier otra CLAVE PRINCIPAL o indexadas valor. Esto es debido a que:

    …todas las filas en las tablas SQLite tiene un signo de 64 bits integer clave que identifica la fila dentro de la tabla de … la Búsqueda de un registro específico, con una rowid, o para todos los registros con rowids dentro de un intervalo especificado es de alrededor de dos veces más rápido que una búsqueda similar hecha por la especificación de cualquier otra CLAVE PRINCIPAL o indexadas valor.

    Con una excepción que se indica a continuación, si un rowid tabla tiene una clave primaria que consta de una sola columna y el tipo declarado de esa columna es «ENTERO» en cualquier mezcla de mayúsculas y minúsculas, , la columna se convierte en un alias para el rowid.

    Este tipo de columna es usualmente referido como un «integer primary key». Un
    La columna de CLAVE PRINCIPAL sólo se convierte en un integer clave primaria si el declarado
    el nombre del tipo es exactamente «ENTERO». Otro tipo de entero de nombres como «INT» o
    «BIGINT» o «ENTERO CORTO» o «UNSIGNED INTEGER» causas de la primaria
    columna de clave que se comportan como un ordinario columna de la tabla con números enteros afinidad
    y un índice único, no como un alias para el rowid.

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

  3. 8

    Una base de datos siempre en silencio crear un índice para una única clave principal por lo que puede internamente, compruebe que es la única manera eficiente.

    Haber creado, se utilizará cuando sea necesario.

    No, por supuesto, siempre agrupados, y se especifica normalmente en el esquema si usted quiere que sea.

Dejar respuesta

Please enter your comment!
Please enter your name here