Buscar en el Blog

jueves, 20 de septiembre de 2012

¿Que son los indices en una base de datos?


INDICES EN SQL SERVER
¿Para qué sirven los índices?
Para mejorar la performance de una consulta.
Es una buena practica, incluso indispensable, tener un índice en las claves primarias, pero no es exclusivo de estas, también se puede tener en cualquier columna de una tabla  de la BD.
Si una tabla no tiene ningún índice creado, SQL Server tratará la tabla como un HEAP.  Un heap es una estructura de datos que almacena la posición física en la que se almacenó cada nueva fila dentro de las páginas asignadas a la tabla.

¿Es lo mismo una clave primaria que un índice?
Una clave primaria puede estar compuesta por más de un campo. Por ejemplo, si tomamos una tabla de empleos, podemos distribuirla ordenada por departamentos, y dentro de cada departamento por niveles. Hacemos clave primaria ambos campos (departamento-nivel) de manera que se podrá repetir departamento, o nivel, pero no se podrá repetir el conjunto de un departamento y un nivel.
La principal diferencia entre un índice y una clave primaria es la repetición de valores. En una clave primaria no pueden repetirse y en un índice si podrían.
Una clave primaria es un campo o varios que identifican cada registro de la base de manera unívoca, es decir, sin posibilidad de confusión.
Un índice es un campo o varios por los que se pueden "ordenar" los registros de manera que acceder a uno concreto es más rápido.

¿Cómo es que un índice puede mejorar la performance de una consulta?
Fácil, los índices ordenan los registros de una tabla, esta ordenación finalmente permite acceder a los registros de manera más rápida, pues se llega más rápido al lugar donde se encuentra la información requerida, ya que estos índices funcionan de similar manera a los índices de un libro.
La recomendación es usar índices sobre las columnas que participan en la cláusula WHERE de una consulta.
Una tabla puede tener un índice clusterado y 249 índices no clusterados. Con lo que da como resultado un total de 250 índices.

Hay dos tipos de índices (en SQL Server):

Índices Agrupados (CLUSTERED).
Ordenan físicamente las filas de una tabla.
Cualquier tabla puede tener ninguno o un índice agrupado (CLUSTERED). Los índices agrupados son la propia tabla, es decir, cuando creamos un índice agrupado sobre una tabla, estamos convirtiendo a la propia tabla en un índice, lo cual tiene varias implicaciones.
A efectos de rendimiento, es importante tener en cuenta, que una tabla con un índice agrupado se almacenará de forma ordenada, lo cual, facilitará la satisfacción de consultas con cláusulas ORDER BY o GROUP BY coincidentes con los campos del índice, por poner un ejemplo representativo.

Índices No Agrupados (NONCLUSTERED).
Se trata de estructuras ajenas a la propia tabla, que consumen su propio almacenamiento. Esto permite, que la tabla se pueda almacenar sobre un Grupo de Ficheros (File Group) y los índices no agrupados sobre un Grupo de Fichero diferente. Es posible crear índices no agrupados, sobre tablas sin índices y sobre tablas con índices (incluso aunque tenga un índice agrupado).

Los índices No Agrupados, suelen ser especialmente efectivos para satisfacer cláusulas WHERE sobre los campos del índice que devuelven un conjunto muy pequeño de registros. También son muy apropiados para satisfacer consultas cuyos campos están todos incluidos en el índice (de este modo, no es necesario acceder a la tabla, pues toda la información está en el índice).

Recuerda que un índice puede estar conformado por varias columnas.
Un índice no es lo mismo que una clave primaria

No hay comentarios:

Publicar un comentario