Diferencias entre los tipos de índices en SQL Server

SQL Server (por lo menos la versión 2008) tiene 3 tipos de índices (me refiero a los índices solamente no a las claves). Índices del tipo clúster, no clúster y XML Principal.

Sin-título-3

Índices Cluster y NON-Cluster

Empezaré con las diferencias entre los tipos de índice cluster y nou cluster en SQL Server 2008 y supongo que previos y posteriores.

Un índice agrupado (clustered index) es un tipo especial de índice que reordena la forma en que los registros de la tabla se almacenan físicamente. Por lo tanto la tabla sólo puede tener un índice agrupado. Los nodos externos (leaf node) de un índice agrupado contienen las páginas de datos.

Haciendo una traducción un poco literal de la definición de leaf node en la wikipedia tenemos que un nodo externo es un nodo de una estructura de árbol de datos que tiene cero nodos secundarios. A menudo, los nodos de la hoja son los nodos más alejado del nodo raíz. En el árbol de la teoría de grafos, un nodo hoja (cómo también son llamados los nodos externos) es un vértice de grado 1 que no sean la raíz (excepto cuando el árbol tiene un solo vértice, en ese caso, la raíz también es una hoja). Cada árbol tiene al menos una hoja.

En la imagen siguiente los nodos 1, 8 y 40 son nodos externos.

tree1 Los únicos índices del tipo clúster de cada tabla son asignados automáticamente a la clave primaria.

Un índice no agrupado (nonclustered index) es un tipo especial de índice en el que el orden lógico del mismo no coincide con el orden físico en que están almacenadas las filas en el disco. El nodo hoja de un índice no agrupado no consiste en las páginas de datos, en cambio, los nodos externos contienen las filas de índice.

Mientras que una tabla sólo puede tener 1 nodo clúster, la misma tabla puede tener hasta 249 índices non clúster.

El índice agrupado se crea de forma predeterminada cuando se crea la clave principal en una columna mientras que los índices no agrupados se crean o manualmente o cuando creas un campo único en una columna.

O sea, la diferencia es que el índice agrupado (clustered index)  es único para cualquier tabla. El último nodo de un índice agrupado contiene los datos reales y los datos son reordenados para cada índice agrupado. Considerando que en el caso del índice no agrupado el nivel externo es en realidad un puntero a los datos en filas es por ello que podemos tener muchos índices no agrupados (nonclustered index)  por cada tabla.

Resumiendo:

Cluster: es como un puntero que apunta de una página a otra y obtienes los datos finales.

Non-Cluster: es como una subparte de cualquier parte.

En otras palabras el índice agrupado sirve para encontrar los datos deseados como índice de la fila (la forma física de los datos) y los no agrupados son una asignación de estos índices agrupados en forma diferente.

Índices XML Principal

Para este tipo de índices es mejor dirigirnos directamente a la web de Microsoft sobre la creación de índices XML.

Comentarios