¿Qué significan realmente el índice agrupado y no agrupado?

1119

Tengo una exposición limitada a DB y solo he usado DB como programador de aplicaciones. Quiero saber sobre Clusteredy 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 se almacenan físicamente los registros en la tabla. Por lo tanto, la tabla solo puede tener un índice agrupado. Los nodos 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 cambio, los nodos hoja contienen filas de índice.

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

¿Alguien puede explicar esto en inglés simple?

PK
fuente

Respuestas:

1119

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 índice nuevo aumentará el tiempo que lleva escribir nuevos registros.

En general, es más rápido leer desde 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.

Shiraz Bhaiji
fuente
43
Debe aclarar lo que quiere decir con "físicamente".
Spencer Ruport
142
físicamente como en los bits reales almacenados en el disco
Peter
17
Consulte msdn "Cuando crea una restricción PRIMARY KEY, se crea automáticamente un índice agrupado único en la columna o columnas si no existe un índice agrupado en la tabla", lo que significa que no es necesario que sea la misma columna.
Ming
46
@Pete ese no es el caso. SQL Server ciertamente no garantiza que todos los archivos de datos se distribuyan en un área física contigua del disco y que no haya fragmentación del sistema de archivos. Ni siquiera es cierto que un índice agrupado esté en orden dentro del archivo de datos. El grado en que este no es el caso es el grado de fragmentación lógica.
Martin Smith
42
Solo un comentario rápido para respaldar el punto de Martin Smith: los índices agrupados no garantizan el almacenamiento secuencial en el disco. Administrar exactamente dónde se colocan los datos en el disco es el trabajo del sistema operativo, no el DBMS. Pero sugiere que los artículos se ordenan generalmente de acuerdo con la clave de agrupación. Lo que esto significa es que si la base de datos crece en 10 GB, por ejemplo, el sistema operativo puede decidir colocar esos 10 GB en fragmentos de 5 x 2 GB en diferentes partes del disco. Una tabla agrupada que cubre los 10 GB se almacenará secuencialmente en cada fragmento de 2 GB, sin embargo, esos fragmentos de 2 GB NO PUEDEN ser secuenciales.
Blobbles
601

Un índice agrupado significa que le está diciendo a la base de datos que almacene valores cercanos realmente cercanos entre sí en el disco. Esto tiene el beneficio de la exploración / recuperación rápida de registros que caen en algún rango de valores de índice agrupados.

Por ejemplo, tiene dos tablas, Cliente y Pedido:

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

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

Si desea recuperar rápidamente todos los pedidos de un cliente en particular, puede 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 un disco (en clúster), lo que agilizará su recuperación.

PD El índice en CustomerID obviamente no será único, por lo que debe agregar un segundo campo para "uniquificar" el índice o dejar que la base de datos se encargue de eso, pero esa es otra historia.

En cuanto a múltiples índices. 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 habitación grande con muchas mesas. Puede colocar estas tablas para formar varias filas o juntarlas todas para formar una gran mesa de conferencias, pero no en ambos sentidos 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.

csano
fuente
44
Dicho esto, CI siempre debe usarse para PK
mko
44
Entonces, con un índice agrupado, ¿son los registros en el índice o la tabla los que están almacenados juntos?
Caltor
55
@Caltor La mesa. El índice está ordenado por definición. Por ejemplo, se ordenaría un btree para que uno pueda simplemente hacer aritmética de direcciones para buscar. La idea del clúster es atender la tabla al rendimiento de un índice particular. Para que quede claro, los registros de la tabla se reordenarán para que coincidan con el orden en que se encuentra originalmente el índice .
FLGMwt
99
@Caltor ¡Para nada! De hecho, la documentación y el nombre en sí son bastante engañosos. Tener un "índice agrupado" realmente tiene poco que ver con el índice. Conceptualmente, lo que realmente tiene es "una tabla agrupada en el índice x ".
FLGMwt
3
@ JohnOrtizOrdoñez: Claro, usted puede utilizar casi cualquier que se almacena en la fila, por lo que no XML, VARCHAR(MAX)o VARBINARY(MAX). Tenga en cuenta que generalmente tiene sentido agrupar primero en el campo de fecha , ya que un índice agrupado es más eficiente para los escaneos de rango, que son más comunes en los tipos de fecha. YMMV.
317

En el almacenamiento orientado a filas de SQL Server, los índices agrupados y no agrupados se organizan como árboles B.

ingrese la descripción de la imagen aquí

( Fuente de la imagen )

La diferencia clave entre los índices agrupados y los índices no agrupados es que el nivel de hoja del índice agrupado es la tabla. Esto tiene dos implicaciones.

  1. Las filas en las páginas de hoja de índice agrupadas siempre contienen algo para cada una de las columnas (no dispersas) de la tabla (ya sea el valor o un puntero al valor real).
  2. El índice agrupado es la copia primaria de una tabla.

Los índices no agrupados también pueden hacer el punto 1 mediante el uso de la INCLUDEcláusula (desde SQL Server 2005) para incluir explícitamente todas las columnas sin clave, pero son representaciones secundarias y siempre hay otra copia de los datos (la tabla en sí).

CREATE TABLE T
(
A INT,
B INT,
C INT,
D INT
)

CREATE UNIQUE CLUSTERED INDEX ci ON T(A,B)
CREATE UNIQUE NONCLUSTERED INDEX nci ON T(A,B) INCLUDE (C,D)

Los dos índices anteriores serán casi idénticos. Con las páginas de índice de nivel superior que contienen valores para las columnas clave A,By las páginas de nivel de hoja que contienenA,B,C,D

Solo puede haber un índice agrupado por tabla, porque las filas de datos se pueden ordenar en un solo orden.

La cita anterior de los libros en línea de SQL Server causa mucha confusión

En mi opinión, sería mucho mejor redactado como.

Solo puede haber un índice agrupado por tabla, porque las filas a nivel de hoja del índice agrupado son las filas de la tabla.

La cita en línea de los libros no es incorrecta, pero debe quedar claro que la "clasificación" de los índices agrupados y no agrupados es lógica, no física. Si lee las páginas a nivel de hoja siguiendo la lista vinculada y lee las filas de la página en orden de matriz de ranuras, entonces leerá las filas de índice en orden, pero físicamente las páginas pueden no estar ordenadas. La creencia común de que con un índice agrupado las filas siempre se almacenan físicamente en el disco en el mismo orden que la clave de índice es falsa.

Esta sería una implementación absurda. Por ejemplo, si se inserta una fila en el medio de una tabla de 4 GB, SQL Server no tiene que copiar 2 GB de datos en el archivo para dejar espacio para la fila recién insertada.

En cambio, se produce una división de página. Cada página en el nivel de hoja de los índices agrupados y no agrupados tiene la dirección ( File:Page) de la página siguiente y anterior en orden de clave lógica. Estas páginas no necesitan ser contiguas o en orden de clave.

por ejemplo, la cadena de páginas enlazadas podría ser 1:2000 <-> 1:157 <-> 1:7053

Cuando se produce una división de página, se asigna una nueva página desde cualquier lugar del grupo de archivos (ya sea de una extensión mixta, para tablas pequeñas o una extensión uniforme no vacía que pertenece a ese objeto o una extensión uniforme recién asignada). Esto podría incluso no estar en el mismo archivo si el grupo de archivos contiene más de uno.

El grado en que el orden lógico y la contigüidad difieren de la versión física idealizada es el grado de fragmentación lógica.

En una base de datos recién creada con un solo archivo, ejecuté lo siguiente.

CREATE TABLE T
  (
     X TINYINT NOT NULL,
     Y CHAR(3000) NULL
  );

CREATE CLUSTERED INDEX ix
  ON T(X);

GO

--Insert 100 rows with values 1 - 100 in random order
DECLARE @C1 AS CURSOR,
        @X  AS INT

SET @C1 = CURSOR FAST_FORWARD
FOR SELECT number
    FROM   master..spt_values
    WHERE  type = 'P'
           AND number BETWEEN 1 AND 100
    ORDER  BY CRYPT_GEN_RANDOM(4)

OPEN @C1;

FETCH NEXT FROM @C1 INTO @X;

WHILE @@FETCH_STATUS = 0
  BEGIN
      INSERT INTO T (X)
      VALUES        (@X);

      FETCH NEXT FROM @C1 INTO @X;
  END

Luego verificó el diseño de la página con

SELECT page_id,
       X,
       geometry::Point(page_id, X, 0).STBuffer(1)
FROM   T
       CROSS APPLY sys.fn_PhysLocCracker( %% physloc %% )
ORDER  BY page_id

Los resultados fueron por todas partes. La primera fila en orden de teclas (con valor 1 - resaltada con la flecha a continuación) estaba en casi la última página física.

ingrese la descripción de la imagen aquí

La fragmentación se puede reducir o eliminar reconstruyendo o reorganizando un índice para aumentar la correlación entre el orden lógico y el orden físico.

despues de correr

ALTER INDEX ix ON T REBUILD;

Tengo lo siguiente

ingrese la descripción de la imagen aquí

Si la tabla no tiene índice agrupado, se llama montón.

Los índices no agrupados se pueden construir en un montón o en un índice agrupado. Siempre contienen un localizador de filas de vuelta a la tabla base. En el caso de un montón, este es un identificador de fila física (rid) y consta de tres componentes (Archivo: Página: Ranura). En el caso de un índice agrupado, el localizador de filas es lógico (la clave de índice agrupado).

Para el último caso, si el índice no agrupado ya incluye naturalmente la (s) columna (s) clave de CI como columnas de clave NCI o INCLUDEcolumnas -d, entonces no se agrega nada. De lo contrario, las columnas clave de CI que faltan se agregan silenciosamente al NCI.

SQL Server siempre garantiza que las columnas clave sean únicas para ambos tipos de índice. Sin embargo, el mecanismo en el que esto se aplica para índices no declarados como únicos difiere entre los dos tipos de índice.

Los índices agrupados obtienen un uniquifieragregado para cualquier fila con valores clave que duplican una fila existente. Esto es solo un entero ascendente.

Para los índices no agrupados no declarados como únicos, SQL Server agrega silenciosamente el localizador de filas a la clave de índice no agrupada. Esto se aplica a todas las filas, no solo a aquellas que en realidad son duplicadas.

La nomenclatura agrupada frente a la no agrupada también se utiliza para los índices de almacenamiento de columnas. Las mejoras en papel a los estados de almacenamiento de columnas de SQL Server

Aunque los datos del almacén de columnas no están realmente "agrupados" en ninguna clave, decidimos mantener la convención tradicional de SQL Server de referirnos al índice primario como un índice agrupado.

Martin Smith
fuente
8
@brainstorm sí, soy consciente de eso. Probablemente eso se deba a la redacción de esta página de MSDN, pero para ver que la redacción allí es algo engañosa, solo necesita mirar los temas de fragmentación
Martin Smith
12
@brainstorm: Es sorprendente cómo algunas declaraciones falsas se repiten como evangelio. Un clúster indica que, al menos desde la perspectiva de las lecturas secuenciales, sería "deseable" tener las filas almacenadas físicamente en el disco en el mismo orden que el índice , pero eso está muy lejos de decir que en realidad las hará ser almacenado de tal manera.
supercat
55
@ MartinSmith He reproducido y confirmado los resultados de su prueba SQL Server 2014. Obtengo 95%fragmentación del índice después de la inserción inicial. Después se hizo index rebuildla fragmentación 0%y se ordenaron los valores. Me pregunto, ¿podemos decir eso The only time the data rows in a table are stored in sorted order is when its clustered index fragmentation is 0?
gotqn
8
@ MartinSmith Ahora, señor, esta es una respuesta. Me encantaría verlo en la parte superior de la lista de respuestas, pero a medida que avanza SO, "rápido y simple" recibe la votación.
vaitrafra
55
@Manachi, esta respuesta se dio 5 años después de que se hiciera la pregunta original. El propósito de esto es corregir algunos aspectos engañosos de esas respuestas. Los caprichos (ahora de 8 años) del OP no son una preocupación mía. Otros lectores pueden apreciar una vista de nivel inferior.
Martin Smith
150

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

ÍNDICE AGRUPADO

Si entra a una biblioteca pública, encontrará que todos los libros están ordenados en un orden particular (muy probablemente el Sistema Decimal Dewey o DDS). Esto corresponde al "índice agrupado" de los libros. Si el DDS # para el libro que desea fuera 005.7565 F736s, comenzaría por ubicar la fila de estanterías etiquetadas 001-099o algo así. (Este signo de tapa final al final de la pila corresponde a un "nodo intermedio" en el índice). Eventualmente, se desglosaría en 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 AGRUPADO

Pero si no ingresó a la biblioteca con el número DDS de su libro memorizado, necesitaría un segundo índice para ayudarlo. En los viejos tiempos encontraría en la parte delantera de la biblioteca una maravillosa mesa de cajones conocida como el "Catálogo de tarjetas". En él había miles de tarjetas 3x5, una para cada libro, clasificadas en orden alfabético (por título, tal vez). 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 etiquetaría con el rango de tarjetas que contenía ( Ka - Klpor 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 tendrá el libro en sí,número de índice (el 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 ordenarlas en un orden diferente en un catálogo de tarjetas separado. (Normalmente, 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 de estos índices "no agrupados" como desee.

kmote
fuente
2
Quizás podría ampliar esta analogía para describir columnas "incluidas" , que se pueden usar con índices no agrupados: se podría imaginar una tarjeta en el catálogo de tarjetas que incluye más que un solo libro, sino una lista de todos los publicados versiones del libro, organizadas numéricamente por fecha de publicación. Al igual que en una "columna incluida", esta información se almacena solo a nivel de hoja (reduciendo así el número de tarjetas que el bibliotecario debe crear).
kmote
1
Gran analogía: ¡realmente ayuda a visualizarlo!
Denis
71

Encuentre a continuación algunas características de los índices agrupados y no agrupados:

Índices agrupados

  1. Los índices agrupados son índices que identifican de forma exclusiva 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. Por defecto, una columna con una clave primaria ya tiene un índice agrupado.

Índices no agrupados

  1. Los índices no agrupados son como índices simples. Solo se utilizan para la recuperación rápida de datos. No estoy seguro de tener datos únicos.
Anirudh Sood
fuente
34
Una ligera corrección al Punto 1. Un índice agrupado no necesariamente identifica de manera exclusiva las filas en una tabla SQL. Esa es la función de una CLAVE PRIMARIA
Nigel
44
@Nigel, ¿una CLAVE PRIMARIA o un ÍNDICE ÚNICO?
anar khalilov
respuesta práctica y directa, gracias @Anirudh Sood
Oscar Romero
50

Una regla general muy simple y no técnica sería que los índices agrupados generalmente se usan para su clave principal (o, al menos, una columna única) y que los no agrupados se usan para otras situaciones (tal vez una clave externa) . De hecho, SQL Server creará por defecto un índice agrupado en su (s) columna (s) de clave principal. Como habrá aprendido, el índice agrupado se relaciona con la forma en que los datos se clasifican físicamente en el disco, lo que significa que es una buena opción general para la mayoría de las situaciones.

Dan Diplo
fuente
47

Índice agrupado

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

  • " diccionario " No necesita ningún otro índice, ya es un índice de acuerdo con las palabras

Índice no agrupado

Un índice no agrupado es análogo a un índice en un libro. Los datos se almacenan en un solo 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.

  • " Libro de química " al mirar hay un índice separado para señalar la ubicación del capítulo y al "FIN" hay otro índice que señala la ubicación de PALABRAS comunes
abdul rehman kk
fuente
6

Í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 se pueden ordenar en un solo orden.

La única vez que las filas de datos en una tabla se almacenan en 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 í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 denomina localizador de fila. 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 en clúster, el localizador de filas es la clave de índice en clúster.

Puede agregar columnas sin clave al nivel de hoja del índice no agrupado para omitir los límites de clave de índice existentes y ejecutar consultas totalmente cubiertas, indexadas. Para obtener más información, vea Crear índices con columnas incluidas. Para obtener detalles sobre los límites de las claves 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-descriptions

marvelTracker
fuente
4

Permítanme ofrecer una definición de libro de texto sobre "índice de agrupamiento", que se toma de 15.6.1 de Sistemas de bases de datos: El libro completo :

También podemos hablar de índices de agrupación , que son índices de un atributo o atributos de modo que todas las tuplas con un valor fijo para la clave de búsqueda de este índice aparecen en aproximadamente pocos bloques que puedan contenerlos.

Para comprender la definición, echemos un vistazo al Ejemplo 15.10 proporcionado por el libro de texto:

Una relación R(a,b)que se ordena por atributo ay se almacena en ese orden, empaquetada en bloques, seguramente está agrupada. Un índice activado aes un índice de agrupación, ya que para un avalor dado a1, todas las tuplas con ese valor ason consecutivas. Por lo tanto, aparecen empaquetados en bloques, excepto posiblemente para el primer y último bloque que contienen el avalor a1, como se sugiere en la figura 15.14. Sin embargo, es poco probable que un índice en b se agrupe, ya que las tuplas con un bvalor fijo se extenderán por todo el archivo a menos que los valores de ay bestén muy correlacionados.

Fig. 15.14

Tenga en cuenta que la definición no exige que los bloques de datos tengan que ser contiguos en el disco; solo dice que las tuplas con la clave de búsqueda se empaquetan en la menor cantidad de bloques de datos posible.

Un concepto relacionado es la relación agrupada . Una relación está "agrupada" si sus tuplas se agrupan en aproximadamente el menor número de bloques que pueda contener esas tuplas. En otras palabras, desde la perspectiva de un bloque de disco, si contiene tuplas de diferentes relaciones, entonces esas relaciones no se pueden agrupar (es decir, hay una forma más compacta de almacenar dicha relación intercambiando las tuplas de esa relación de otros bloques de disco con el tuplas no pertenece a la relación en el bloque de disco actual). Claramente, R(a,b)en el ejemplo anterior está agrupado.

Para conectar dos conceptos juntos, una relación agrupada puede tener un índice de agrupación y un índice de no agrupación. Sin embargo, para una relación no agrupada, el índice de agrupación no es posible a menos que el índice se construya sobre la clave principal de la relación.

"Clúster" como palabra se envía spam en todos los niveles de abstracción del lado de almacenamiento de la base de datos (tres niveles de abstracción: tuplas, bloques, archivo). Un concepto llamado " archivo agrupado ", que describe si un archivo (una abstracción para un grupo de bloques (uno o más bloques de disco)) contiene tuplas de una relación o relaciones diferentes. No se relaciona con el concepto de índice de agrupación, ya que está a nivel de archivo.

Sin embargo, a algunos materiales didácticos les gusta definir el índice de agrupación en función de la definición del archivo agrupado. Esos dos tipos de definiciones son iguales en el nivel de relación agrupada, sin importar si definen una relación agrupada en términos de bloque de disco de datos o archivo. Desde el enlace en este párrafo,

Un índice en los atributos A en un archivo es un índice de agrupación cuando: Todas las tuplas con valor de atributo A = a se almacenan secuencialmente (= consecutivamente) en el archivo de datos

Almacenar tuplas consecutivamente es lo mismo que decir "las tuplas se empaquetan en aproximadamente tan pocos bloques como puedan contener esas tuplas" (con una pequeña diferencia en un archivo que habla sobre el otro, el otro habla sobre el disco). Esto se debe a que almacenar tuplas consecutivamente es la forma de lograr "empaquetarse en aproximadamente el menor número de bloques que puedan contener esas tuplas".

xxks-kkk
fuente
3

Índice agrupado : la restricción de clave principal crea el índice agrupado automáticamente si no existe un índice agrupado en la tabla. Los datos reales del índice agrupado se pueden almacenar a nivel de hoja del índice.

Índice no agrupado : los datos reales del índice no agrupado no se encuentran directamente en el nodo hoja, en su lugar, tiene que dar un paso adicional para encontrarlo porque solo tiene valores de localizadores de filas que apuntan hacia datos reales. El índice no agrupado no se puede ordenar como índice agrupado. Puede haber múltiples índices no agrupados por tabla, en realidad depende de la versión del servidor sql que estemos usando. Básicamente, el servidor SQL 2005 permite 249 índices no agrupados y para las versiones anteriores como 2008, 2016 permite 999 índices no agrupados por tabla.

Abhishek Duppati
fuente
2

Índice agrupado: un índice agrupado define el orden en que los datos se almacenan físicamente en una tabla. Los datos de la tabla se pueden ordenar de una sola manera, por lo tanto, solo puede haber un índice agrupado por tabla. En SQL Server, la restricción de clave principal crea automáticamente un índice agrupado en esa columna en particular.

Índice no agrupado- Un índice no agrupado no clasifica los datos físicos dentro de la tabla. De hecho, un índice no agrupado se almacena en un lugar y los datos de la tabla se almacenan en otro lugar. Esto es similar a un libro de texto donde el contenido del libro se encuentra en un lugar y el índice se encuentra en otro. Esto permite más de un índice no agrupado por tabla. Es importante mencionar aquí que dentro de la tabla los datos se ordenarán por un índice agrupado. Sin embargo, dentro del índice no agrupado, los datos se almacenan en el orden especificado. El índice contiene valores de columna en los que se crea el índice y la dirección del registro al que pertenece el valor de la columna. Cuando se emite una consulta en una columna en la que se crea el índice, la base de datos primero irá al índice y buscará La dirección de la fila correspondiente en la tabla. Luego irá a esa dirección de fila y buscará otros valores de columna. Debido a este paso adicional, los índices no agrupados son más lentos que los índices agrupados

Diferencias entre el índice agrupado y el no agrupado

  1. Solo puede haber un índice agrupado por tabla. Sin embargo, puede crear múltiples índices no agrupados en una sola tabla.
  2. Los índices agrupados solo clasifican las tablas. Por lo tanto, no consumen almacenamiento adicional. Los índices no agrupados se almacenan en un lugar separado de la tabla real que reclama más espacio de almacenamiento.
  3. Los índices agrupados son más rápidos que los índices no agrupados ya que no implican ningún paso de búsqueda adicional.

Para obtener más información, consulte este artículo.

Santhoopa Jayawardhana
fuente