Decir que tengo una ID de fila (int) en una base de datos como la clave principal. Si me consulta fuera de la ID a menudo también debo índice es? O ¿es una clave principal significa que ya está indexada?

Razón que pido es porque en MS SQL Server puedo crear un índice en esta IDENTIFICACIÓN, que como he dicho es mi clave principal.

Edit: una pregunta adicional – va a hacer ningún daño, además, el índice de la clave principal?

InformationsquelleAutor danifo | 2009-01-20

11 Comentarios

  1. 65

    Tienes razón, es confuso que SQL Server le permite crear índices duplicados en el mismo campo(s). Pero el hecho de que usted puede crear otro, no indica que el índice PK no también ya existen.

    El índice adicional no es bueno, pero el único daño (muy pequeño) es el adicional de tamaño de archivo y la fila de creación de sobrecarga.

    • El daño de los índices son muy dañinos de hecho. Por un lado, los índices de comer de almacenamiento. Por otro lado, se ralentiza, se escribe y actualizaciones. Siempre eliminar índices que no va a ser utilizado.
  2. 44

    Como todos los demás ya han dicho, las claves primarias se indexan automáticamente.

    La creación de más índices de la columna de clave principal sólo tiene sentido cuando usted necesita para optimizar una consulta que utiliza la clave principal y algunas otras columnas específicas. Mediante la creación de otro índice en la columna de clave principal e incluyendo algunas otras columnas con él, se puede llegar a la optimización deseada para una consulta.

    Por ejemplo, tienes una tabla con muchas columnas pero son solo consultar el ID, el Nombre y la Dirección de las columnas. Tomando ID como clave principal, podemos crear el siguiente índice que se construye en el ID, pero incluye el Nombre y la Dirección de las columnas.

    CREATE NONCLUSTERED INDEX MyIndex
    ON MyTable(ID)
    INCLUDE (Name, Address)

    Así, cuando se utilice esta consulta:

    SELECT ID, Name, Address FROM MyTable WHERE ID > 1000

    SQL Server le dará el resultado sólo utilizando el índice que hemos creado y que no van a leer nada de el real de la mesa.

  3. 27

    NOTA: Esta respuesta direcciones de clase empresarial de desarrollo en-la-grande.

    Este es un RDBMS cuestión, no sólo de SQL Server, y el comportamiento puede ser muy interesante. Para uno, si bien es común para las claves principales para ser automáticamente (de forma exclusiva) indizada, NO es absoluta. Hay veces en que es esencial que una clave principal NO ser el único indexado.

    En la mayoría de los Rdbms, un índice único se creará automáticamente en una clave principal si no existe ya uno. Por lo tanto, usted puede crear su propio índice en la columna de clave principal antes de declarar como clave principal, luego de que el índice va a ser utilizado (si es aceptable) por el motor de base de datos cuando se aplica la clave principal de la declaración. A menudo, usted puede crear la clave principal y permitir su defecto índice único ser creado, a continuación, crear su propia alternativa índice en la columna, a continuación, suelte el índice por defecto.

    Ahora la parte divertida–¿cuándo usted NO quiere un único índice de clave principal? Usted no quiere uno, y no se puede tolerar, cuando su tabla adquiere suficiente de datos (filas) para realizar el mantenimiento del índice demasiado caro. Esto varía según el hardware, el RDBMS motor, las características de la tabla y la base de datos, y el sistema de carga. Sin embargo, generalmente se comienza a manifestar una vez una mesa alcanza un par de millones de filas.

    La cuestión esencial es que cada inserción de una fila o de actualización de la clave primaria de la columna de resultados en un índice de digitalización para garantizar la unicidad. Que el único índice de la exploración (o su equivalente en cualquier RDBMS) se convierte en mucho más caro que en la tabla crece, hasta que se domina el rendimiento de la tabla.

    He tratado con este problema muchas veces con tablas tan grandes como dos millones de filas, 8 Tb de almacenamiento, y cuarenta millones de fila se inserta por día. Se me fue el encargado de rediseñar el sistema involucrado, que incluía a caer el índice de clave principal único, prácticamente, como el paso uno. De hecho, dejar de lado ese índice era necesario en la producción, simplemente, para recuperarse de una interrupción, antes de llegar cerca de un rediseño. Que el rediseño incluye la búsqueda de otras formas para asegurar la unicidad de la clave primaria y para proporcionar un acceso rápido a los datos.

    • ¿Y si la clave es un int o bigint autoincrement clave? Es SQL Server lo suficientemente inteligente como para no hacer un índice único de exploración en este caso?
    • un IDENTITY campo no está garantizada para ser único. Después de todo, los usuarios pueden insertar valores duplicados si el usuario IDENTITY_INSERT.
    • Sé que este es un antiguo tema, pero no entiendo cómo una singularidad de escaneo de un índice sería una carga en el sistema. Un árbol B+examen debe ser O(log n) * v, donde v es limitada sobrecarga para el índice de fragmentación, imperfecta árbol de equilibrio, etc.. por Lo tanto 2 millones de filas sería el logaritmo base 2 de 2,000,000,000 (aproximadamente 31 busca) veces, decir, 2 o 3 o incluso 10. 40M inserta por día es de alrededor de 462/seg., ~100 IO por insertar… Ahh… Oh. Lo que yo veo. Y esto fue antes de la generalizada Ssd.
    • A menos que se le cayó la restricción de unicidad, no la sobrecarga de la comprobación de cada una de las filas de la singularidad ser mucho mayor?
  4. 7

    Aquí el pasaje de la MSDN:

    Cuando se especifica una restricción de CLAVE PRINCIPAL de una tabla, el Motor de Base de datos impone la unicidad de datos mediante la creación de un índice único para las columnas de clave principal. Este índice también permite un acceso rápido a los datos cuando se utiliza la clave principal en las consultas. Por lo tanto, las claves principales que son elegidos deben seguir las reglas para la creación de índices únicos.

  5. 1

    Bien en SQL Server, por lo general, la clave principal se indexan automáticamente.
    Esto es cierto, pero no se garantiza de consulta más rápido.
    La clave principal le dará un excelente rendimiento cuando solo hay 1 campo como clave principal.
    Pero, cuando hay varias campo como clave principal, entonces el índice se basa en esos campos.

    Por ejemplo:
    Campo a, B, C son la clave primaria, por lo tanto, cuando usted consulta basada en los 3 campos en la CLÁUSULA where, el rendimiento es bueno,
    PERO cuando se quiere a consulta con un Solo C campo en la CLÁUSULA where, que no van a obtener un buen rendimiento. Por lo tanto, para obtener su rendimiento y el funcionamiento, deberá índice C de campo manualmente.

    La mayoría del tiempo, usted no ve el problema hasta que golpea a más de 1 millón de registros.

  6. 1

    Declarar una PRIMARY KEY o UNIQUE restricción hace que SQL Server para crear automáticamente un índice.

    Un índice único puede ser creado sin la coincidencia de una restricción, sino una restricción (primary key o unique) no puede existir sin tener un índice único.

    A partir de aquí, la creación de una restricción:

    • causar un índice con el mismo nombre se creó
    • negar caer el índice creado como restricción no está permitido existe sin ella

    y al mismo tiempo quitar la restricción va a caer el índice asociado.

    Es así, ¿hay diferencia real entre un PRIMARY KEY o UNIQUE INDEX:

    • NULL valores no están permitidos en PRIMARY KEY, pero se permite en UNIQUE índice; y como en operadores de conjuntos (UNIÓN, SALVO que se CRUZAN), aquí NULL = NULL que significa que usted sólo puede tener un valor como dos NULLs se encuentra como duplicados de cada uno de los otros;
    • sólo uno PRIMARY KEY puede existe por la mesa, mientras Novecientos noventa y nueve único de los índices se pueden crear
    • cuando PRIMARY KEY restricción se crea, se crea como agrupado a menos que ya exista un índice agrupado en la tabla o NONCLUSTERED se utiliza en su definición; cuando UNIQUE índice se crea, se crea como NONCLUSTERED menos no es específica de ser CLUSTERED y tal ya no existe;
  7. 0

    Tengo una enorme base de datos con un no (separado) índice.

    Cualquier momento me consulta por parte de la clave primaria los resultados son, para todos los intensivos de fines, instantánea.

    • Eso es porque el PK es un índice agrupado, mira a tu plan de consulta
    • Voy a mirar en el plan de consulta si algo va mal.
  8. 0

    claves primarias se indexan automáticamente

    se pueden crear índices a partir de la pk dependiendo de su uso

    • índice zip_code, id puede ser útil si usted a menudo se seleccione por zip_code y el id de la

Dejar respuesta

Please enter your comment!
Please enter your name here