Los índices en sql server

21/11/2011

En SQL Server, un factor crítico del rendimiento de la base de datos son los índices. Los índices pueden ser de 5 tipos: clusterizados, no clusterizados, xml, espaciales y full text. (También podemos incluir los índices en las vistas)

Índices clusterizados: sólo puede haber uno por tabla ya que las tablas sólo pueden ser ordenadas de una única forma. Normalmente coincide con la clave primaria de la tabla y de hecho, si creamos una tabla en sql server y definimos una clave primaria, automáticamente nos crea un índice clusterizado.

Índices no clusterizados: pueden haber tantos como queramos y por tanto son las otras formas de ordenar una tabla. Por ejemplo, una tabla de libros puede tener como clave primaria e índice clusterizado el ISBN, y varios índices no clusterizados como por ejemplo temática, autor, etc…

Índices filtrados: son una variante de los no clusterizados que llevan una cláusula Where para filtrar el contenido del índice. Ideal cuando estamos buscando datos en una columna que contiene muchos valores NULL. En dicho índice, en la cláusula WHERE quitamos los NULL, lo que hace que sea un índice compacto y rápido de usar.

xml: son índices sobre el contenido de un documento xml, con lo que aceleran significativamente las consultas sobre xml. Recordar, que desde SQL Server 2005, xml es un tipo nativo y por tanto podemos almacenar datos en dicho tipo.

espaciales: estos tipos de índices son muy útiles con los datos de tipo espaciales tal como los tipos geométricos y geográficos (nuevos en SQL Server 2008). Utilizan dos niveles (primarios y secundarios) y funcionan así: imaginemos que buscamos las intersecciones de una dirección en valencia ciudad y tenemos el mapa entero de España. Sin índice, buscaríamos intersecciones de calles por toda españa (impracticable), pero con un índice espacial, el nivel primario nos devolvería la zona de valencia ciudad y ahí ya entraría la búsqueda en el segundo nivel que se encargaría de comprobar las intersecciones de las calles que le hemos indicado.

full text: son índices sobre catálogos de texto. Nos sirven para mejorar las búsquedas en consultas con queries con CONTAINS y FREETEXT en búsquedas sobre catálogos de texto sobre campos de tipo observaciones, comentarios, etc… De esta forma es capaz de entender lo que buscamos y no sólo busca cadenas, sino palabras y significados.

La fragmentación de los índices es el elemento crítico y es inevitable cuando hacemos muchas updates de una tabla, y por tanto un dba debe estar constántemente atento a dicha fragmentación. Por cada índice, con el botón derecho del ratón Propiedades, podemos consultar dicha fragmentación en el SQL Server Management Studio.

Fragmentación de los índices en sql server

Fragmentación de los índices en sql server

Hay dos parámetros muy interesantes de los índices:

fillfactor: nos permite añadir un espacio libre en las hojas de los índices, de esta forma, si tenemos muchos updates, podemos evitar o minimizar el temido particionamiento de las hojas de los índices (splits)

padindex: es similar a fillfactor, pero añade dicho espacio libre a todas las hojas del índice (no sólo a la raiz del índice, sino a todo el árbol del índice).

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: