Pregunta

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

¿Fue útil?

Solución

Índice Agrupado

  • Sólo uno de cada tabla
  • 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 mesa
  • 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%.

Otros consejos

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 *)

Los índices agrupados son almacenados 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.

Los í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.

Í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. Sólo puede haber 249 índices no agrupados para una tabla(hasta la versión sql 2005 versiones posteriores admiten hasta 999 índices no agrupados).
  2. Normalmente se hace en el 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.

Índice Agrupado

  • Sólo un índice clúster puede estar allí en una tabla
  • Ordenar los registros y almacenarlos físicamente de acuerdo a la orden
  • La recuperación de datos es más rápido que los índices no agrupados
  • 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
  • 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
  • Los 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.

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.

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.

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.

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.

Un índice de la base de datos consta de 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.

// Copia 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 la estructura se llama un montón.

No agrupado

  • 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.

Usted podría haber ido a través de la teoría parte de la por encima de los puestos de:

-El Índice agrupado como podemos ver los puntos directamente al registro de decirsu 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 de

-Mientras, 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 tardará algo más de tiempo para el acceso.También tiene su propia memoria/espacio para almacenar el índice de

enter image description here

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top