Clustered indexes
Ante la pregunta de un amigo, me ha surgido la curiosidad de saber qué es un clustered index y para qué se utiliza. Este gran amigo confió en mi, ya que sabe que tengo más de cinco años de experiencia trabajando con bases de datos.
El caso es que hasta el momento, solamente había trabajado con las Bases de Datos de forma lo más estándar posible, ya que como todos sabéis esto te permite que la base de datos utilizada pueda ser reemplazada en un futuro por otra de otro fabricante, sin que el impacto en la empresa cliente sea importante, aunque siempre teniendo en cuenta las particularidades, ventajas e inconvenientes de cada una.
Como os iba diciendo, hasta ahora había oído hablar de PRIMARY KEY, FOREIGN KEY, VIEWS, INDEXES, UNIQUE, etc, cosas así. Vamos lo que todo el mundo que trabaja diariamente con bases de datos. O sea, que ante la pregunta de mi amigo me he puesto a investigar, a ver si es tan difícil la respuesta como para venir a consultarme tan urgentemente.
Como podemos suponer, los CLUSTERED INDEXES, no son algo que esté definido en el SQL ANSI estándar. Más bien está definido por algunas bases de datos propietarias, sea el caso por ejemplo de SQL SERVER, aunque también lo podemos encontrar en Postgres o Sybase. Como podemos adivinar, todo este tipo de características tratan de mejorar el rendimiento de un Sistema de Base de datos, mejorando las búsquedas. Para todos los que hemos recibido clases y nos hemos examinado de Ingeniería del Software, sabemos que en los algorítmos de búsqueda es muy importante la ordenación, y esto es lo que se trata de conseguir con este tipo de índices mejorar el rendimiento del sistema en función de las necesidades específicas, sin olvidar la mejora en el espacio físico de almacenamiento del servidor.
Características de los clustered indexes:
- Un clustered index es aquél en el cual el órden lógico de las claves (índices) es el mismo que el que hay almacenado físicamente para la tabla correspondiente.
- Cada tabla puede contener un, y solo uno, índice cluster ya que lógicamente solamente puede existir un orden físico.
- El índice cluster de una tabla deberá restringirse a una única columna o campo.
Principales aplicaciones de los clustered indexes:
- Tablas con gran cantidad de registros, generalmente.
- Busquedas en tablas cuyos campos índice tienen un número limitado de valores UNIQUE
- Consultas que devuelven grandes cantidades de filas
- Consultas preguntando por un dato entre dos límites, uso de la cláusula BETWEEN.
- Campos sobre los que es típico realizar consultas de tipo
Min()oMax() - En el caso particular de SQL Server, los INSERTs se realizan al final de la tabla y los UPDATEs se realizan en dos pasos, DELETE+INSERT. Con lo cual la presencia de un clustered index mejora notablemente el rendimiento, aunque a veces no sea tan obvio a qué campo le corresponde asignárselo.
Inconvenientes que debemos tener en cuenta:
- Mantener un orden físico de índice supone una carga de proceso adicional en el servidor
- La tabla con un índice cluster debe ser reordenada en cada operación de adición (INSERT) para obtener su estado correcto, esto supone un coste si la tabla es escrita con frecuencia.
En qué situaciones no es recomendable utilizarlo:
- Tablas sujetas a un gran número de INSERTs
- Tablas con índices incrementales (identificadores de tablas como pedidos, fechas, etc)
- Tablas pequeñas
- Tablas sobre las que se realizan consultas que devuelven un número reducido de registros
- En campos índice con valores amplios, es decir, muchos dígitos.
Pues bueno, querido amigo, espero que esto resuelva tus dudas respecto a tu pregunta, la elección de este tipo de índices va a depender de tu análisis de necesidades para cada situación en concreto, y por supuesto de las pruebas de rendimiento que realices.
Como ves, podías confiar en mi ya que a veces no cuenta tanto lo que sepas, sino la capacidad que tengas para averiguarlo y comprenderlo y por tanto utilizarlo, y esto es una garantía de éxito. Piensa que a pesar de nuestra experiencia, siempre nos quedan cosas por aprender todos los días, pero es precisamente nuestra experiencia, talento y profesionalidad la que nos lleva a ser capaces de solucionar los problemas que se nos presentan o las dudas que nos aparecen con total confianza.
Amigo, no dudes en acudir a mi cuando necesites alguna cosa más, estaré encantado de atenderte, como debes saber.
ATENCIÓN: En próximos artículos os hablaré sobre las DTS de SQL SERVER, os advierto que va a ser un artículo interesante. ;)
Y por supuesto, aquí tenéis las referencias:
- Getting started with SQL Server 7.0
- MSDN Microsoft Software Developer Network
- QBS Software
- Windows Network Magazine
- InformIT
- DBForums
- The Algorithm Design Manual
- SQL-Server-Performance.com