¿Cuáles son las diferencias entre un clustered y un non-clustered index?

  • Usted sólo puede tener un índice agrupado por tabla. Pero hay un montón de otras diferencias…
  • Un índice agrupado en realidad describe el orden en que los registros son almacenados físicamente en el disco, de ahí la razón por la que sólo puede haber uno. Un Índice No Agrupado define un orden lógico que no coincide con el orden físico en el disco.
  • Agrupados básicamente significa que los datos en que fisica orden en la tabla. Esta es la razón por la que usted sólo puede tener uno por cada mesa. Desagrupado significa que es «sólo» un orden lógico.
  • ¿qué es la «lógica» de la orden? un índice No agrupado almacena el índice de las teclas en el orden físico y almacena un puntero a la tabla, es decir, la clave del índice agrupado.
  • Página: lógico de la tabla de punto de vista. Por supuesto, los índices no clúster están ordenados físicamente en el mismo índice.
  • Cuidado: la Mayoría de las respuestas son incorrectas. Cada respuesta afirmando que un índice agrupado es «más rápido» o que un índice no agrupado no es «almacenada en la orden de índice» está mal (esto se aplica a casi todas las respuestas).
  • Posibles duplicados de ¿Qué Agrupados y No agrupados índice realmente significa?

12 Comentarios

  1. 249

    Índice Agrupado

    • Sólo uno por cada mesa de
    • Más rápido de leer que no agrupados cuando los datos se almacenan físicamente en orden de índice

    No Índice Agrupado

    • Puede ser utilizado muchas veces por tabla
    • Más rápido para las operaciones de inserción y actualización de un índice agrupado

    Ambos tipos de índice para mejorar el rendimiento al seleccionar los datos con los campos que utilizan el índice, pero será más lento, actualización y operación de inserción.

    Debido a la lenta inserción y actualización de los índices agrupados se debe establecer en un campo que normalmente es incremental, es decir Id o Timestamp.

    SQL Server normalmente sólo se utiliza un índice si la selectividad es superior al 95%.

    • También hay consideraciones de almacenamiento. Cuando la inserción de filas en una tabla con ningún índice agrupado, las filas se almacenan espalda con espalda en la página y actualizar una fila puede resultar en la fila se movió hacia el extremo de la mesa, dejando el espacio vacío y la fragmentación de la tabla y los índices.
    • ¿Qué significa que un índice es «más rápido a leer»? Cuántas más veces por segundo que puede hacer usted? ¿Qué es x?
    • usted no tiene que cuidar lo que es de x. Todo lo que usted necesita saber es que para una aplicación con millones de usuarios, x será significativo
    • Es puramente dogma. No es «más rápido de leer, ya que los datos se almacenan en orden». Es más rápido leer porque evitar un índice de lectura Y, a CONTINUACIÓN, la mesa de lectura. Es más rápido rango de escaneo (si es significativo) porque los datos se almacenan en orden. es decir, el factor de la agrupación es perfecto.
    • También la idea de que el 95% de los registros deben ser únicas, es una falacia. Supongamos que tenemos una tabla con 1.000.000 de filas y el índice de una columna con 500.000 claves. 0% son únicos, pero cada tecla devuelve 2 de un millón de filas. Este índice es absolutamente útil sin importar que el 0% de los registros son únicos.
    • Me pregunto cómo es que la «selectividad» sería medido. Un índice que tiene un valor para 999,900 registros y un valor de 100 podría ser muy útil si uno sólo se utiliza para la búsqueda de la 100.
    • «los datos se almacenan físicamente en orden de índice» ¿qué quieres decir con eso? En un nivel que es trivialmente cierto, porque las páginas de datos y la hoja de índice páginas son una y la misma – así que, obviamente, el orden de uno describe el orden de los otros. Sin embargo, esto no necesariamente en un orden en particular, tales como el orden de la clave de índice stackoverflow.com/questions/1251636/…

  2. 73

    Los índices agrupados físicamente el orden de los datos en el disco. Esto significa que no hay datos adicionales necesarios para el índice, pero sólo puede haber un índice agrupado (obviamente). El acceso a los datos utilizando un índice agrupado es la más rápida.

    Todos los otros índices no agrupados. Un índice no agrupado tiene un duplicado de los datos de las columnas indizadas mantuvo ordenado junto con los punteros a las filas de datos (punteros para el índice agrupado, si es que existe). Esto significa que el acceso a los datos a través de un índice no agrupado tiene que ir a través de una capa extra de indirección. Sin embargo, si usted seleccionar sólo los datos que hay en las columnas indizadas usted puede obtener los datos directamente de la duplicación de los datos de índice (por eso es una buena idea para SELECCIONAR sólo las columnas que necesite y no uso *)

    • ‘Sin embargo, si usted seleccionar sólo los datos que hay en las columnas indizadas usted puede obtener los datos directamente de la duplicación de los datos de índice’ – sí, sí que es la importante excepción a la prefieren índice agrupado heurística. Supongo que en este caso básicamente usted tiene un índice agrupado, pero menos datos en la tabla que está consultando tan potencialmente se puede leer más rápido del disco.
  3. 33

    Agrupado los índices se almacenan físicamente en la mesa. Esto significa que son la forma más rápida y sólo puede tener un índice agrupado por tabla.

    Índices no agrupados se almacenan por separado, y usted puede tener tantos como desee.

    La mejor opción es establecer el índice agrupado en la mayoría de los utilizados única columna, normalmente, en el PK. Usted siempre debe tener un bien seleccionados índice agrupado en las tablas, a menos que un motivo muy importante: no se puede pensar en una sola, pero bueno, puede ser por ahí, para no hacerlo sube.

    • usted puede elaborar más sobre «debemos siempre tener un índice agrupado en nuestras mesas» ? sin mayor explicación que la declaración es simplemente incorrecto, porque de la palabra siempre
    • Tienes razón Pacerier, uno no debería usar absoluta declaraciones a la ligera. Aunque yo no conozco un solo caso cuando usted no tiene una buena selección de índice agrupado, tal caso, podría existir así que he cambiado mi respuesta más a una versión genérica.
  4. 27

    Índice Agrupado

    1. Sólo puede haber un índice agrupado en una tabla.
    2. Normalmente se hacen en la clave principal.
    3. Los nodos hoja de un índice agrupado contienen las páginas de datos.

    Índice No Agrupado

    1. No puede ser sólo 249 índices no agrupados para una tabla(hasta la versión sql 2005 versiones posteriores admiten hasta 999 índices no agrupados).
    2. Hacen generalmente sobre cualquier tecla.
    3. El nodo de hoja de un índice no agrupado no consiste en las páginas de datos. En lugar de ello, los nodos hoja contienen filas de índice.
  5. 23

    Índice Agrupado

    • Sólo un índice clúster puede estar allí en una mesa
    • Ordenar los registros y almacenarlos físicamente de acuerdo a la orden de
    • De recuperación de datos es más rápido que los índices no clúster
    • No necesita espacio extra para almacenar la estructura lógica

    No Índice Agrupado

    • Puede haber cualquier número de índices no agrupados en una tabla de
    • No afectan el orden físico. Cree un orden lógico para las filas de datos y el uso de punteros a los datos físicos de los archivos de
    • Datos de inserción/actualización es más rápido que el índice agrupado
    • Utilizar el espacio adicional para almacenar la estructura lógica

    Aparte de estas diferencias tienen que saber que cuando la tabla no está agrupado (cuando la tabla no tiene un índice agrupado) de los archivos de datos están desordenadas y utiliza Montón de estructura de datos como la estructura de datos.

  6. 8

    Agrupados básicamente significa que los datos se en que orden físico en la mesa. Esta es la razón por la que usted sólo puede tener uno por cada mesa.

    Desagrupado significa que es «sólo» un orden lógico.

  7. 7

    Pros:

    Los índices agrupados gran trabajo para los intervalos (por ejemplo, select * from my_table donde my_key entre @min y @max)

    En algunas condiciones, el DBMS no tendrá que hacer el trabajo para ordenar si usted utiliza un orderby declaración.

    Contras:

    Los índices clúster se puede ralentizar inserta debido a que los diseños de los registros tienen que ser modificado según los registros se colocan en si las llaves no están en orden secuencial.

  8. 5

    Un índice agrupado en realidad describe el orden en que los registros son almacenados físicamente en el disco, de ahí la razón por la que sólo puede haber uno.

    Un Índice No Agrupado define un orden lógico que no coincide con el orden físico en el disco.

  9. 5

    Un índice agrupado es esencialmente una ordenados copia de los datos en las columnas indizadas.

    La principal ventaja de un índice agrupado es que cuando la consulta (búsqueda) busca los datos en el índice, a continuación, no más de IO que se necesita para recuperar los datos.

    La sobrecarga de mantener un índice agrupado, especialmente en una frecuencia actualizadas de la tabla, puede llevar a un mal desempeño y por esa razón puede ser preferible para crear un índice no agrupado.

  10. 5

    Indizada a la base de datos tiene dos partes: un conjunto de registros físicos, que están dispuestas en algún orden arbitrario, y un conjunto de índices que identifican la secuencia en la que los registros se deben leer para producir un resultado ordenados por algún criterio. Si no hay correlación entre la disposición física y el índice, luego de leer todos los registros en orden puede requerir hacer un montón de independientes de registro único de las operaciones de lectura. Porque una base de datos puede ser capaz de leer decenas de registros consecutivos en menos tiempo que dedican a leer los dos registros consecutivos, el rendimiento puede ser mejorado si los registros que son consecutivos en el índice también se almacenan de forma consecutiva en el disco. La especificación de que es un índice agrupado hará que la base de datos para hacer un poco de esfuerzo, de diferentes bases de datos difieren en cuanto a lo mucho) para arreglar las cosas para que los grupos de registros que son consecutivos en el índice será consecutivos en el disco.

    Por ejemplo, si uno fuera a comenzar con un vacío que no clúster de base de datos y añadir 10.000 registros en secuencia aleatoria los registros probablemente sería añadido al final en el orden en que fueron añadidos. La lectura de la base de datos en orden por el índice requeriría de 10.000 de un registro, se lee. Si uno fuera a utilizar un clúster de base de datos, sin embargo, el sistema se puede comprobar si la adición de cada registro si el record anterior fue almacenado por sí mismo; si se encuentra que de ser el caso, se podría escribir de registro con el nuevo uno en el extremo de la base de datos. A continuación, podría mirar en el registro físico antes de las ranuras donde se trasladó registros que se usan para residir y ver si el disco que siguió a la que se almacenan por sí mismo. Si se encuentra que de ser el caso, se podría mover de que el registro de ese lugar. El uso de este tipo de enfoque podría causar muchos registros que se agrupan en pares, por lo tanto, potencialmente, casi duplicando la velocidad de lectura secuencial.

    En realidad, agrupados en las bases de datos de uso más sofisticados algoritmos de este. Un aspecto clave que hay que señalar, sin embargo, que hay un equilibrio entre el tiempo necesario para actualizar la base de datos y el tiempo necesario para leer de forma secuencial. El mantenimiento de un clúster de base de datos aumentará significativamente la cantidad de trabajo necesario para agregar, quitar o actualizar registros en cualquier forma que afecte a la ordenación de la secuencia. Si la base de datos se puede leer de forma secuencial mucho más a menudo de lo que va a ser actualizado, la agrupación puede ser una gran victoria. Si se actualiza con frecuencia, pero rara vez se leen en la secuencia, la agrupación puede ser un gran rendimiento de drenaje, especialmente si la secuencia en la que se agregan elementos a la base de datos es independiente de su orden con respecto al índice agrupado.

  11. 0

    //Copiado de MSDN, el segundo punto de índice no agrupado no está claramente mencionado en las otras respuestas.

    Agrupado

    • Los índices agrupados ordenar y almacenar los datos de las filas de la tabla o vista
      basado en sus valores de clave. Estas son las columnas incluidas en el
      definición de índice. Sólo puede haber un índice agrupado por tabla,
      porque las filas de datos pueden ser almacenados en sólo una orden.
    • El único momento en las filas de datos en una tabla se almacenan en orden es
      cuando la tabla contiene un índice agrupado. Cuando una tabla tiene un
      índice agrupado, la tabla se denomina tabla agrupada. Si una tabla
      no tiene un índice agrupado, sus filas de datos se almacenan en una desordenada
      estructura llamada un montón.

    No agrupados

    • Los índices no agrupados tienen una estructura separada de las filas de datos. Un
      índice no clúster contiene la clave de índice no agrupado los valores y

      cada valor de la clave de entrada tiene un puntero a la fila de datos que contiene la
      valor de la clave.
    • El puntero de un índice de fila en un índice no agrupado a una fila de datos
      se llama un localizador de fila. La estructura del localizador de fila depende de
      si las páginas de datos se almacenan en un montón o un clúster de la tabla.
      Para un montón, un localizador de fila es un puntero a la fila. Para un clúster de
      tabla, el localizador de fila es la clave del índice agrupado.
  12. 0

    Usted podría haber ido a través de la teoría parte de los anteriores posts:

    -El Índice agrupado como podemos ver los puntos directamente al registro, es decir, su forma tan directa que se necesita menos tiempo para una búsqueda. Además no tendrá ningún extra de memoria/espacio para almacenar el índice

    – , Mientras que, en el Índice no agrupado, indirectamente puntos para el Índice agrupado, a continuación, tendrá acceso a la grabación real, debido a su carácter indirecto tomará algo más de tiempo para el acceso.También tiene su propia memoria/espacio para almacenar el índice

    ¿Cuáles son las diferencias entre un clúster y un índice no agrupado?

Dejar respuesta

Please enter your comment!
Please enter your name here