sql server - primary - ¿Qué significan realmente los índices agrupados y no agrupados?




primary key nonclustered (6)

Tengo una exposición limitada a DB y solo he usado DB como programador de aplicaciones. Quiero saber acerca de los Non clustered indexes y Non clustered indexes . Busqué en Google y lo que encontré fue:

Un índice agrupado es un tipo especial de índice que reordena la forma en que los registros en la tabla se almacenan físicamente. Por lo tanto, la tabla solo puede tener un índice agrupado. Los nodos de hoja de un índice agrupado contienen las páginas de datos. Un índice no agrupado es un tipo especial de índice en el que el orden lógico del índice no coincide con el orden físico almacenado de las filas en el disco. El nodo hoja de un índice no agrupado no consta de las páginas de datos. En su lugar, los nodos de hoja contienen filas de índice.

Lo que encontré en SO fue ¿Cuáles son las diferencias entre un índice agrupado y un índice no agrupado? .

¿Alguien puede explicar esto en un lenguaje sencillo?


A continuación, encontrará algunas características de los índices agrupados y no agrupados:

Índices agrupados

  1. Los índices agrupados son índices que identifican de forma única las filas en una tabla SQL.
  2. Cada tabla puede tener exactamente un índice agrupado.
  3. Puede crear un índice agrupado que cubra más de una columna. Por ejemplo: create Index index_name(col1, col2, col.....) .
  4. De forma predeterminada, una columna con una clave principal ya tiene un índice agrupado.

Índices no agrupados

  1. Los índices no agrupados son como índices simples. Sólo se utilizan para la recuperación rápida de datos. No estoy seguro de tener datos únicos.

Con un índice agrupado, las filas se almacenan físicamente en el disco en el mismo orden que el índice. Por lo tanto, solo puede haber un índice agrupado.

Con un índice no agrupado hay una segunda lista que tiene punteros a las filas físicas. Puede tener muchos índices no agrupados, aunque cada nuevo índice aumentará el tiempo necesario para escribir nuevos registros.

En general, es más rápido leer un índice agrupado si desea recuperar todas las columnas. No tiene que ir primero al índice y luego a la tabla.

Escribir en una tabla con un índice agrupado puede ser más lento, si es necesario reorganizar los datos.


Me doy cuenta de que esta es una pregunta muy antigua, pero pensé que ofrecería una analogía para ayudar a ilustrar las buenas respuestas de arriba.

ÍNDICE CLUSTRADO

Si entras en una biblioteca pública, encontrarás que todos los libros están ordenados en un orden particular (lo más probable es que sea el Sistema decimal de Dewey o DDS). Esto corresponde al "índice agrupado" de los libros. Si el DDS # para el libro que desea es 005.7565 F736s , comenzaría por ubicar la fila de estanterías con la etiqueta 001-099 o algo así. (Este signo de extremo al final de la pila corresponde a un "nodo intermedio" en el índice.) Eventualmente, se desglosaría hasta el estante específico etiquetado 005.7450 - 005.7600 , luego escanearía hasta encontrar el libro con el DDS especificado # , y en ese punto has encontrado tu libro.

ÍNDICE NO CLUSTRADO

Pero si no ingresó a la biblioteca con el DDS # de su libro memorizado, entonces necesitará un segundo índice para ayudarlo. En los viejos tiempos, en la parte delantera de la biblioteca, se podía encontrar una maravillosa oficina de cajones conocida como el "Catálogo de tarjetas". En ella había miles de tarjetas 3x5, una para cada libro, ordenadas alfabéticamente (por título, quizás). Esto corresponde al "índice no agrupado" . Estos catálogos de tarjetas se organizaron en una estructura jerárquica, de modo que cada cajón se etiquetara con la gama de tarjetas que contenía ( Ka - Kl , por ejemplo, es decir, el "nodo intermedio"). Una vez más, profundizaría hasta encontrar su libro, pero en este caso, una vez que lo haya encontrado (es decir, el "nodo hoja"), no tiene el libro en sí, sino una tarjeta con un número de índice. (el número DDS) con el que puede encontrar el libro real en el índice agrupado.

Por supuesto, nada detendría al bibliotecario de fotocopiar todas las tarjetas y clasificarlas en un orden diferente en un catálogo de tarjetas separado. (Por lo general, había al menos dos catálogos de este tipo: uno ordenado por nombre de autor y otro por título). En principio, podría tener tantos índices "no agrupados" como desee.


Un índice agrupado significa que le está diciendo a la base de datos que almacene valores cercanos que realmente estén cerca uno del otro en el disco. Esto tiene la ventaja de un rápido escaneo / recuperación de registros que caen en algún rango de valores de índices agrupados.

Por ejemplo, tiene dos tablas, Cliente y Orden:

Customer
----------
ID
Name
Address

Order
----------
ID
CustomerID
Price

Si desea recuperar rápidamente todos los pedidos de un cliente en particular, es posible que desee crear un índice agrupado en la columna "CustomerID" de la tabla de pedidos. De esta manera, los registros con el mismo CustomerID se almacenarán físicamente cerca uno del otro en el disco (agrupados), lo que acelera su recuperación.

PS El índice en CustomerID obviamente no será único, por lo que debe agregar un segundo campo para "unificarlo" o dejar que la base de datos lo maneje por usted, pero esa es otra historia.

Respecto a los índices múltiples. Solo puede tener un índice agrupado por tabla porque esto define cómo se organizan físicamente los datos. Si desea una analogía, imagine una gran sala con muchas mesas en ella. Puede poner estas tablas para formar varias filas o juntarlas todas para formar una gran mesa de conferencias, pero no ambas formas al mismo tiempo. Una tabla puede tener otros índices, luego apuntarán a las entradas en el índice agrupado que a su vez finalmente dirá dónde encontrar los datos reales.


Índice agrupado

Los índices agrupados clasifican y almacenan las filas de datos en la tabla o vista según sus valores clave. Estas son las columnas incluidas en la definición del índice. Solo puede haber un índice agrupado por tabla, porque las filas de datos en sí pueden ordenarse en un solo orden.

La única vez que las filas de datos en una tabla se almacenan en un orden ordenado 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 estructura desordenada llamada montón.

No agrupado

Los índices no agrupados tienen una estructura separada de las filas de datos. Un índice no agrupado contiene los valores clave del índice no agrupado y cada entrada de valor clave tiene un puntero a la fila de datos que contiene el valor clave. El puntero de una fila de índice en un índice no agrupado a una fila de datos se llama un localizador de filas. La estructura del localizador de filas depende de si las páginas de datos se almacenan en un montón o en una tabla agrupada. Para un montón, un localizador de fila es un puntero a la fila. Para una tabla agrupada, el localizador de filas es la clave de índice agrupado.

Puede agregar columnas sin clave al nivel de hoja del índice no agrupado para omitir los límites de la clave de índice existente y ejecutar consultas cubiertas e indexadas. Para obtener más información, consulte Crear índices con columnas incluidas. Para obtener detalles sobre los límites de clave de índice, consulte las Especificaciones de capacidad máxima para SQL Server.

Referencia: https://docs.microsoft.com/en-us/sql/relational-databases/indexes/clustered-and-nonclustered-indexes-described


Índice agrupado

Un índice agrupado determina el orden físico de los DATOS en una tabla. Por esta razón, una tabla solo tiene 1 índice agrupado.

como "diccionario" No hay necesidad de ningún otro índice, ya está indexado según las palabras

Índice no agrupado

Un índice no agrupado es análogo a un índice en un libro. Los datos se almacenan en un lugar. el índice se almacena en otro lugar y el índice tiene punteros a la ubicación de almacenamiento de los datos. Por esta razón, una tabla tiene más de 1 índice no agrupado.

como "libro de química" al mirar, hay un índice separado para señalar la ubicación del Capítulo y en el "FIN" hay otro Índice que señala la ubicación de PALABRAS comunes





non-clustered-index