¿Cuáles son las diferencias entre a clustered
y a non-clustered index
?
¿Cuáles son las diferencias entre a clustered
y a non-clustered index
?
Respuestas:
Índice agrupado
Índice no agrupado
Ambos tipos de índice mejorarán el rendimiento cuando se seleccionen datos con campos que usan el índice, pero ralentizarán las operaciones de actualización e inserción.
Debido a la inserción y actualización más lentas, los índices agrupados deben establecerse en un campo que normalmente es incremental, es decir, Id o Marca de tiempo.
SQL Server normalmente solo usará un índice si su selectividad es superior al 95%.
Los índices agrupados ordenan físicamente los datos en el disco. Esto significa que no se necesitan datos adicionales para el índice, pero solo puede haber un índice agrupado (obviamente). Acceder a los datos utilizando un índice agrupado es el más rápido.
Todos los demás índices no deben estar agrupados. Un índice no agrupado tiene un duplicado de los datos de las columnas indexadas que se mantienen ordenados junto con punteros a las filas de datos reales (punteros al índice agrupado si hay uno). Esto significa que el acceso a los datos a través de un índice no agrupado tiene que pasar por una capa adicional de indirección. Sin embargo, si selecciona solo los datos que están disponibles en las columnas indexadas, puede recuperar los datos directamente de los datos de índice duplicados (es por eso que es una buena idea SELECCIONAR solo las columnas que necesita y no usar *)
Los índices agrupados se almacenan físicamente en la tabla. Esto significa que son los más rápidos y solo puede tener un índice agrupado por tabla.
Los índices no agrupados se almacenan por separado, y puede tener tantos como desee.
La mejor opción es establecer su índice agrupado en la columna única más utilizada, generalmente la PK. Siempre debe tener un índice agrupado bien seleccionado en sus tablas, a menos que sea una razón muy convincente, no puedo pensar en uno solo, pero bueno, puede estar ahí afuera, por no hacerlo.
Además de estas diferencias, debe saber que cuando la tabla no está agrupada (cuando la tabla no tiene un índice agrupado) los archivos de datos están desordenados y utiliza la estructura de datos del montón como estructura de datos.
Pros:
Los índices agrupados funcionan muy bien para rangos (por ejemplo, seleccione * de my_table donde my_key entre @min y @max)
En algunas condiciones, el DBMS no tendrá que hacer un trabajo para ordenar si utiliza una declaración de pedido.
Contras:
Los índices agrupados pueden ralentizar las inserciones porque los diseños físicos de los registros deben modificarse a medida que los registros se introducen si las nuevas claves no están en orden secuencial.
Un índice agrupado es esencialmente una copia ordenada de los datos en las columnas indexadas.
La principal ventaja de un índice agrupado es que cuando su consulta (búsqueda) localiza los datos en el índice, no se necesitan E / S adicionales para recuperar esos datos.
La sobrecarga de mantener un índice agrupado, especialmente en una tabla actualizada con frecuencia, puede conducir a un bajo rendimiento y, por esa razón, puede ser preferible crear un índice no agrupado.
Una base de datos indexada tiene dos partes: un conjunto de registros físicos, que se organizan en un orden arbitrario, y un conjunto de índices que identifican la secuencia en la que se deben leer los registros para obtener un resultado ordenado por algún criterio. Si no hay correlación entre la disposición física y el índice, leer todos los registros en orden puede requerir realizar muchas operaciones de lectura independientes de un solo registro. Debido a que una base de datos puede leer docenas de registros consecutivos en menos tiempo del que tomaría leer dos registros no consecutivos, el rendimiento puede mejorar si los registros que son consecutivos en el índice también se almacenan consecutivamente en el disco.
Por ejemplo, si uno comenzara con una base de datos vacía no agrupada y agregara 10,000 registros en secuencia aleatoria, los registros probablemente se agregarían al final en el orden en que se agregaron. Leer la base de datos en orden según el índice requeriría 10,000 lecturas de un registro. Sin embargo, si se usara una base de datos en clúster, el sistema podría verificar al agregar cada registro si el registro anterior fue almacenado por sí mismo; Si descubriera que ese es el caso, podría escribir ese registro con el nuevo al final de la base de datos. Luego podría mirar el registro físico antes de las ranuras donde solían residir los registros movidos y ver si el registro que siguió estaba almacenado por sí mismo. Si se determina que ese es el caso, podría mover ese registro a ese lugar. El uso de este tipo de enfoque haría que muchos registros se agrupen en pares,
En realidad, las bases de datos agrupadas utilizan algoritmos más sofisticados que este. Sin embargo, una cosa clave a tener en cuenta es que existe una compensación entre el tiempo requerido para actualizar la base de datos y el tiempo requerido para leerla secuencialmente. Mantener una base de datos en clúster aumentará significativamente la cantidad de trabajo necesario para agregar, eliminar o actualizar registros de cualquier manera que afecte la secuencia de clasificación. Si la base de datos se leerá secuencialmente con mucha más frecuencia de la que se actualizará, la agrupación puede ser una gran victoria. Si se actualizará con frecuencia, pero rara vez se lee en secuencia, la agrupación puede ser una gran pérdida de rendimiento, especialmente si la secuencia en la que los elementos se agregan a la base de datos es independiente de su orden de clasificación con respecto al índice agrupado.
Es posible que haya pasado por la parte teórica de las publicaciones anteriores:
-El índice agrupado ya que podemos ver los puntos directamente para registrar, es decir, es directo, por lo que lleva menos tiempo realizar una búsqueda. Además, no necesitará memoria / espacio adicional para almacenar el índice
-Mientras, en el índice no agrupado, señala indirectamente al índice agrupado y luego accederá al registro real, debido a su naturaleza indirecta, tomará algo más de tiempo para acceder. También necesita su propia memoria / espacio para almacenar el índice
// Copiado de MSDN, el segundo punto del índice no agrupado no se menciona claramente en las otras respuestas.
Agrupados
No agrupado