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