lunes, 26 de junio de 2017

Índices en SQL Server - 1 de 2



Es una estructura auxiliar que sirve para optimizar las consultas. Mediante esta estructura, al realizar una consulta SQL Server realizará menos operaciones para devolver los resultados y la consulta se realizará mas rápidamente ya que los datos están estructurados de forma que sea mas sencillo localizarlos.

Algo muy similar a los Indices creados por Sql Server, es el índice de un libro, en una página indica en que página del libro está cada capítulo, y además podemos saber también, que apartados hay dentro de un capítulo y en que página están. En el caso de una base de datos, todos los registros de esta, se almacenan en páginas, después se crean unos índices que indican en que página de datos está cada registro y por encima de estos índices, se crean otros subíndices que almacenan la cabecera de cada índice. Además se crearía una cabecera principal que almacenaría a su vez la cabecera de estos subíndices.

Como se almacenan los datos
  • Cada registro de cada tabla, se almacena en una página de datos estas páginas tienen un tamaño de 8 kb. A un grupo de ocho páginas de datos se le llama Extensión.
  • Las filas no se almacenan en un orden concreto y no hay un orden detallado de la secuencia de las páginas de datos.
  • No existe una lista que almacene la estructura de las páginas de datos.
  • Cada vez que se inserta un nuevo registro en una página de datos llena, esta se fracciona creandose otra página de datos.
Como se accede a los datos

1. SQL Server verifica si existen índices
2. En caso de que si haya índices, el optimizador de consultas verifica si es mas sencillo realizar la consulta usando los índices o sin usarlos 
  • Sin indices:
    • Va a la primera hoja de datos de la tabla
    • Busca página por página examinando todas las filas de cada página
    • Selecciona las filas que cumplen la consulta
  • Con índices:
    • Usa la estructura de árbol del índice para buscar las filas que cumplen la consulta.
    • Una vez sabe donde están extrae estas filas. 
Ventajas y desventajas de los índices

Los indices abrevian la recuperación de los datos, sin índices tendríamos que recorrer todas las páginas de datos hasta encontrar las filas que cumplen la consulta, sobre todo aceleran las consultas que combinen varias tablas y agrupen u ordenen datos.

Como almacena los datos la base de datos:
  • Si los datos estan sin ordenar se llaman montón. Un montón va a ser un grupo de páginas y cada página tiene 8Kb.
  • Si no tengo indices en la tabla recorro toda la tabla, con lo cual tengo que realizar muchas idas y salidas de datos en las páginas.
  • Con un indice busca los datos con un orden lógico interno, sin necesidad de buscar en todas las páginas.
  • Una página solo puede tener datos de una tabla.
  • Cuando creamos un indice incrementamos el tamaño de la base de datos.
Existen dos tipos de indices:

1. Índices Agrupados:
  • Un indice agrupado por tabla.
  • Los datos se reordenan por el campo indexado.
  • Los datos se colocan en orden alfabético hasta ocupar los 8 Kb que ocupa cada página.
  • Cuando una página está completa, se divide en otra página para dar entrada a nuevos datos.
  • Cuando inserto un indice nuevo, las páginas antiguas se borran y se crean las nuevas páginas ya ordenadas alfabéticamente.
  • La estructura se divide en varios niveles, por un lado está el nivel de hoja de los datos, otro nivel lo forman las páginas de indice y el último nivel está formado por la raiz.
  • Una página solo puede tener un nivel raiz, pero puede tener más de un nivel de hoja de indices.
  • La página de indices y la página de datos coinciden en su orden de colocación.
  • En el momento de insertar datos, se dividen las páginas para poder insertar el dato colocado alfabéticamente, el problema es que se fragmenta la página de datos y la página de indices, esto provoca que se tengan que hacer búsquedas más largas, debido a que buscamos en el indice, en la página de datos y en las páginas fragmentadas.
  • Los indices agrupados no deben realizarse sobre columnas que tengan muchas modificaciones y actualizaciones, debido a que los datos se fragmentaran.
  • Realizar indices agrupados sobre columnas en las que se realicen búsquedas exactas o intervalos de valores.
  • Un indice agrupado sería como un índice de un Diccionario, busco por la letra ordenada alfabeticamente y encuentro la palabra que deseo en muy poco tiempo.
  • La aplicación no siempre utiliza el indice, depende de la consulta y no podemos controlar que utilice el indice. Normalmente siempre lo utiliza. 
  • Se puede realizar sobre columnas con datos duplicados, aunque conviene que sea sobre datos que no esten muy repetidos.
  • En caso que hubiese elementos duplicados, se genera un indice único interno propio del indice.
  • Se puede dejar un espacio en las páginas para que no las fragmente al insertar nuevos datos.

¿Cuantas páginas de indices se pueden generar?

Las páginas de indices tambien son de 8Kb, con lo cual, cuando se llena un indice, se crea otra pagina de indices a su lado. Los 8Kb de cada página son de tamaño fisico, no en memoria.

Cuando hacemos una Primary Key, generamos un indice agrupado, aunque también se puede decir que no lo haga poniendo después de Primary Key la palabra nonclustered.


Ejemplo de indices agrupados:


Realizo una consulta por el campo indexado: Busco H.
La búsqueda comienza por la raiz, compara el valor a buscar H con el dato A, selecciona si el dato que busca es mayor o menor que el que compara. Como el dato A es menor, continua con el dato P. Como el dato P es mayor al dato H, vuelve y ya sabe en que página del indice debe buscar el dato. En la página de indices repite el mismo proceso, compara con el dato A, compara con el dato E y compara con el dato I, como el dato I es mayor al dato H, vuelve y sabe que el dato que encuentra está en la página del dato E. Busca en la página E hasta encontrar el dato. 
Con este sistema solamente recorre dos páginas, teniendo las páginas sin indices recorrería todos los datos hasta dar con la H, devolviendo los datos de la consulta.


Espero haber ayudado en algo. Hasta la próxima oportunidad!












  

2 comentarios:

  1. El uso de índices es muy util para auto acomodar las consultas de resultados solicitados

    ResponderEliminar
  2. Gran sugerencia el uso de índices para organizar el inventarios de los
    pantalones de mezclilla corte colombiano de mayoreo me han facilitado mucho mi trabajo.

    ResponderEliminar

       
free counters

Páginas vistas en total según Google